本版本是测试版本,luoxis使你轻松编写QQ机器人
本框架只是包装了一下go-cqhttp的API,方便开发使用,1.0的基础包装版本已经停止更新(已经满足需求)
安装
本版本包括:go-cqhttp所有API的请求封装,flaskHTTP服务器,方便使用存在消息内容的变量,并且夹带go-cqhttp
打开go-cqhttp文件夹的config.yml文件,在正确位置填写QQ账号和密码,然后在此目录下打开CMD,输入命令:
go-cqhttp.exe
未登录的状态是:
d:\Downloads\go-cqhttp_windows_arm64>go-cqhttp.exe
[2023-01-06 16:24:01] [INFO]: 当前版本:v1.0.0-rc4
[2023-01-06 16:24:01] [INFO]: 将使用 device.json 内的设备信息运行Bot.
[2023-01-06 16:24:01] [INFO]: Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.
[2023-01-06 16:24:06] [INFO]: 开始尝试登录并同步消息...
[2023-01-06 16:24:06] [INFO]: 使用协议: iPad
[2023-01-06 16:24:08] [INFO]: Protocol -> connect to server: 120.232.18.213:8080
[2023-01-06 16:24:08] [WARNING]: 登录需要滑条验证码, 请选择验证方式:
[2023-01-06 16:24:08] [WARNING]: 1. 使用浏览器抓取滑条并登录
[2023-01-06 16:24:08] [WARNING]: 2. 使用手机QQ扫码验证 (需要手Q和gocq在同一网络下).
[2023-01-06 16:24:08] [WARNING]: 请输入(1 - 2):
注:这里推荐选择2
已登录:
d:\Downloads\go-cqhttp_windows_arm64>go-cqhttp.exe
[2023-01-06 16:24:32] [INFO]: 当前版本:v1.0.0-rc4
[2023-01-06 16:24:32] [INFO]: 将使用 device.json 内的设备信息运行Bot.
[2023-01-06 16:24:32] [INFO]: Bot将在5秒后登录并开始信息处理, 按 Ctrl+C 取消.
[2023-01-06 16:24:37] [INFO]: 开始尝试登录并同步消息...
[2023-01-06 16:24:37] [INFO]: 使用协议: iPad
[2023-01-06 16:24:37] [INFO]: Protocol -> connect to server: 120.232.18.213:8080
[2023-01-06 16:24:37] [WARNING]: 登录需要滑条验证码, 请选择验证方式:
[2023-01-06 16:24:37] [WARNING]: 1. 使用浏览器抓取滑条并登录
[2023-01-06 16:24:37] [WARNING]: 2. 使用手机QQ扫码验证 (需要手Q和gocq在同一网络下).
[2023-01-06 16:24:37] [WARNING]: 请输入(1 - 2):
2
[2023-01-06 16:26:25] [INFO]: 请使用手机QQ扫描二维码 (qrcode.png) :
[2023-01-06 16:26:45] [INFO]: 扫码成功, 请在手机端确认登录.
[2023-01-06 16:26:55] [INFO]: 登录成功 欢迎使用: 铬夕
[2023-01-06 16:26:55] [INFO]: 开始加载好友列表...
[2023-01-06 16:26:55] [INFO]: 共加载 19 个好友.
[2023-01-06 16:26:55] [INFO]: 开始加载群列表...
[2023-01-06 16:26:55] [INFO]: 共加载 5 个群.
[2023-01-06 16:26:55] [INFO]: 资源初始化完成, 开始处理信息.
[2023-01-06 16:26:55] [INFO]: アトリは、高性能ですから!
[2023-01-06 16:26:55] [INFO]: 正在检查更新.
[2023-01-06 16:26:55] [WARNING]: HTTP 服务器使用了过时的配置格式,请更新配置文件!
[2023-01-06 16:26:55] [INFO]: HTTP POST上报器已启动: http://localhost:5000/
[2023-01-06 16:26:55] [INFO]: CQ HTTP 服务器已启动: [::]:5700
[2023-01-06 16:26:55] [INFO]: 检查更新完成. 当前已运行最新版本.
[2023-01-06 16:26:55] [INFO]: 开始诊断网络情况
hello world
返回到框架根目录
打开main.py,里面的代码是示例代码,可以直接运行,如果运行报错,可以根据报错内容自行安装库
#main.py文件内容
import luoxis
class main(luoxis.luoxis):
def main(self):
self.When_the_message_is_this_send_this(so='你好世界!',Send_this='hello world')
if __name__ == '__main__':
main = main()
main.go()
这里需要导入luoxis本体,然后继承luoxis.luoxis,然后重写main函数,每次消息到来都会调用此函数
注意:类的实例化和main.go()函数的调用都必须在if __name__ == ‘__main__’: 这个if下面进行
运行成功示例:
发送:‘你好世界!’机器人返回:’hello world’
这里调用的函数是self.When_the_message_is_this_send_this,翻译过来就是:当消息为…时,发送此消息
他有两个参数:os,Send_this,从直接理解就是当so=…时发送Send_this
配置
目前有两个配置
UseLegacy = False #是否使用旧版的luoxis,同时也将支持旧版的中文变量
EnableChineseVariables = False #启动新版中文变量,当UseLegacy==True时不可使用英文变量,UseLegacy==None时中英混用
类变量
luoxis类内提供很多变量提供调用
self.SourceGroup #群消息来源
self.MessageContent #消息内容
self.MessageSender #消息发送者(QQ号)
self.MessageType #消息类型(私聊/群组)
self.Source #消息来源,如果是群则写群号,如果是私聊则写对方QQ号
英文类名可以直接翻译得到中文
中文变量(需要配置EnableChineseVariables =None(推荐)或 EnableChineseVariables = true)
self.消息源群
self.消息内容
self.消息发送人
self.消息类型
self.消息来源
类方法
sendMessage
发送消息,自动判读消息类型
传值:QQID:int 消息内容:str
ReplyMessage
回复消息,可以直接回复,不需要对面的QQ号,最好用于私聊
传值:回复消息内容:str
POCQCodeOne
暂时不推荐用
When_the_message_is_this_send_this
如方法名,当消息为…时,发送此消息
传值:so和Send_this
从直接理解就是当so=…时发送Send_this
When_the_message_has_this_send_this
当消息有…时,发送此消息
传值:so:list和Send_this
任务方法:创建任务 event_listeners_go
这个方法可以使主进程代码与任务代码同时异步运行
示例使用代码:
import luoxis
def task(ListeningValue,data) -> bool:
# data = [{'Source':self.Source, \
# 'MessageSender':self.MessageSender, \
# 'MessageContent':self.MessageContent, \
# 'MessageType':self.MessageType}]
data = data[0]
if(ListeningValue == data['MessageSender']):
if(data['MessageContent'] == '创建任务'):
luoxis.sendMessage(data['MessageType'],data['Source'],'请问您要创建什么任务')
elif(data['MessageContent'] == '发送创建任务成功'):
luoxis.sendMessage(data['MessageType'],data['Source'],'执行任务成功(发送这条信息就是任务本身)')
return True #停止任务
class main(luoxis.luoxis):
EnableChineseVariables = None
def main(self):
if(self.MessageContent == '创建任务'):
self.event_listeners_go(ListeningFunction=task,ListeningValue=self.MessageSender) #创建任务,给任务函数传入消息发送者,确定这个任务是谁创建的
#self可以调用类方法
if __name__ == '__main__':
main = main()
main.go()
任务需要一个函数来运行,任务开始执行的时候就会调用任务函数,每收到一条消息,luoxis就会执行一次这个函数,当函数返回True时,任务就终止
定义任务函数:
函数格式(除了函数名,其他都不可以改):task(ListeningValue,data) -> bool
示例代码:如上代码
注意:在函数里面不可以使用luoxis类内的所有方法,因为这是异步的
运行任务
这个event_listeners_go方法需要传以下内容:
ListeningFunction : object 任务函数,传入一个函数对象
ListeningValue : 给函数传的值,除了data以外的值
调用示例:self.event_listeners_go(ListeningFunction=task,ListeningValue=self.MessageSender)
data说明
data是定义函数时必须要的,位置不能变更
data里面是一个列表,列表下标为0时有一个字典:
# data = [{'Source':self.Source, \
# 'MessageSender':self.MessageSender, \
# 'MessageContent':self.MessageContent, \
# 'MessageType':self.MessageType}]
字典里面有Source,MessageSender,MessageContent,MessageType
分别对应:消息来源,消息发送者,消息内容,消息类型
例子:
data[0]['Source'] #获取消息来源
luoxis.sdk
这个是luoxis的核心之一,是go-cqhttpAPI请求的封装库,有大量方法,例子:
luoxis.sdk.发送群消息(<群号>,<要发的内容>,<是否作为纯文本发送>)
luoxis.cq
用于生成CQ码,有两个特殊一点的方法:CqToJson,JsonToCq
从函数名就可以看出,第一个方法用来把CQ码转换成json
第二个用来把Json转换成CQ码
其他非类方法
有一些在luoxis.py里面但是不在luoxis类里面的函数,有一些是弃用的,有一些有用的
sendMessage|发送消息
这两个方法用来发送消息,注意:是两个
sendMessage(消息类型,qid,消息内容) -> bool
发送消息(消息类型,qid,消息内容) -> bool
V方法,获取版本号
不多解释,懂得都懂
v() -> list[<自己的版本号>,<官方最新版本号>]
event_listeners
任务方法背后调用的函数,不推荐用,不多解释
event_listeners(ListeningFunction:object,conn:object,ListeningValue=None) -> None
Mysql操作封装类:luoxis.dbManager
这个类可以使你轻松操作mysql
需要提前在luoxis.py第九行设置数据库信息
dbManager = mysql.MysqlManager(db='mysql_test', user='root', passwd='')
#值以此为数据库名,数据库用户名,数据库密码
增删查改 luoxis.mysql
luoxis.mysql.增(dbManager,表名:str,数据) #插入数据
'''
0 代表是插入数据,因为插入数据和 其他 查询 修改 更新数据条件不一样
数据 = [{
0: [
{"name": 'GFGF'},
{"age": 3333},
{"sex": 1}
]
}]
'''
luoxis.mysql.删(dbManager,表名:str,WHERE) #删除数据
# 删
# 如果 条件很多 就在字典里加条件就可以,如果只有一条数据,就写一个字典就好
# 0 没有任何条件
# 1 是 = 号
# 2 是 > 号
# 剩下具体看 Judeg_parameter方法
'''
WHERE = [{
1: [{
"name": 'FFFF',
"sex": 13
}],
2: [{
"age": 300
}]
}]
'''
luoxis.mysql.改(dbManager,表名,数据,WHERE=None) #改数据,更新数据
'''
WHERE = [{
1: [{
"ID": 10,
"name": "RRR"
}]
}]
数据 = [{
1: [{
"name": 'TTT',
"sex": 6
}]
}]
'''
luoxis.mysql.查(dbManager,表名:str,字段:list,WHERE=None) #查数据
"""
condition: 传入None 则没有查询条件(就会返回所有数据), 传入查询条件,则查询传入条件的规则
get_one: 查询是否查一条 还是查询所有 False 是符合条件的所有东西 True是查符合条件的一条数据
字段 = ['用户名','密码']
WHERE = [{
1: [{
"ID": 4,
"name": "DDD"
}]
}]
"""
1.02a3更新内容
MySQL封装类
这里就不多说了,直接使用luoxis.mysql.dbManager或者luoxis.mysql下面的函数就行,它的本体在下面这篇文章介绍
下面有独特的两个方法
host = 'localhost' #数据库地址
port = 3306 #数据库端口
db = 'mysql_test' #数据库名
user = 'root' #数据库用户名
password = '' #数据库密码
# ---- 用pymysql 操作数据库
def get_connection():
conn = pymysql.connect(host=host, port=port, db=db, user=user, password=password)
return conn
def sql(sql):
db = get_connection()
cursor = db.cursor()
cursor.execute(sql)
db.commit()
db.close()
return cursor.fetchone()
#print(check_it(sql))
def sqls(sql):
data = list()
db = get_connection()
cursor = db.cursor()
cursor.execute(sql)
db.commit()
db.close()
rest=cursor.fetchall()
for i in rest:
data.append(i)
return data
这个是mysql.py开头的方法,luoxis内测版本用的,没事可以注释掉
sqls方法
这个方法可以输出批量的数据
更新内容二:自动获取官方最新版本
懂得都懂
注意事项
1.必须按照文档的去做,只要你按照文档去做通常没有问题,注意更新最新版本
2.必须正确配置并安装go-cqhttp,以下是推荐的配置文件
# go-cqhttp 默认配置文件
account: # 账号相关
uin: # 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: true
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
# 是否启用 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
# 连接服务列表
servers:
# 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
#- http: # http 通信
#- ws: # 正向 Websocket
#- ws-reverse: # 反向 Websocket
#- pprof: #性能分析服务器
# HTTP 通信设置
- http:
# 服务端监听地址
host: 0.0.0.0
# 服务端监听端口
port: 5700
# 反向HTTP超时时间, 单位秒
# 最小值为5,小于5将会忽略本项设置
timeout: 5
# 长轮询拓展
long-polling:
# 是否开启
enabled: false
# 消息队列大小,0 表示不限制队列大小,谨慎使用
max-queue-size: 2000
middlewares:
<<: *default # 引用默认中间件
# 反向HTTP POST地址列表
post :
#- url: '' # 地址
# secret: '' # 密钥
- url: 'http://localhost:5000/' # 地址
secret: '' # 密钥
3.读着文档有不适的地方下面评论区自行评论,别来QQ吵我
4.我不是大佬,技术有限
评论