今天了解到还有个OPQ的框架似乎还不错,于是研究了一下,比酷Q还方便(因为我之前用的air版,图片都发不了)
并且支持多平台,但是最新的版本居然阉割了Windows下的许多功能
不过问题不大,满足我之前的需求了。
于是参考了一下原本iot的python模板然后进行了修改,更加符合自己的用法习惯吧。
然后就是代码:
botConfig->configInfo.py(用于存放接口地址,以及机器人QQ)
robotQQ = "{机器人QQ}"
webapi = "{接口地址,后面无需加/}"
botConfig ->botClass.py (用于存放一些对消息的解析类)
import json
import requests
from .configInfo import *
"""
By : Lan
Website :
"""
# 群组消息接受类
class GroupMess:
def __init__(self, message):
self.FromQQG = message['FromGroupId'] # 来源QQ群
self.QQGName = message['FromGroupName'] # 来源QQ群昵称
self.FromQQ = message['FromUserId'] # 来源QQ
self.FromQQName = message['FromNickName'] # 来源QQ名称
self.Content = message['Content'] # 消息内容
self.MsgTime = message['MsgTime'] # 消息时间
# 私发消息接受类
class PrivateMess:
def __init__(self, message):
self.FromQQ = message['ToUin'] # 来源QQ号
self.ToQQ = message['FromUin'] # 目标QQ号
self.Content = message['Content'] # 消息内容
self.MsgType = message['MsgType'] # 消息类型
# 发送消息类
class SendMessage:
def __init__(self, toUser=0, sendToType=0, sendMsgType='', groupId=0, content='', atUser=0, voiceUrl='', picUrl='',
picBase64Buf='', voiceBase64Buf=''):
self.data = {
"toUser": toUser, # 欲发给的对象 群或QQ好友或私聊对象
"sendToType": sendToType, # 发送消息对象的类型 1好友 2群3私聊
"sendMsgType": sendMsgType, # 欲发送消息的类型 TextMsg、PicMsg、VoiceMsg
"content": content, # 发送的文本内容
"groupid": groupId, # 发送私聊消息是 在此传入群ID 其他情况为0
"atUser": atUser, # At用户 传入用户的QQ号 其他情况为0
"picUrl": picUrl, # 发送图片的网络地址
"picBase64Buf": picBase64Buf, # 发本地送图片的buf 转 bas64 编码
"voiceUrl": voiceUrl, # 发送语音的网络地址
"voiceBase64Buf": voiceBase64Buf, # 发本地送语音的buf 转 bas64 编码
"fileMd5": ""
}
'''
发送图片消息需要有:toUser sendToType sendMsgType picUrl
'''
def send(self):
print(self.data)
requests.post(url=f'{webapi}/v1/LuaApiCaller?qq={robotQQ}&funcname=SendMsg&timeout=10',
data=json.dumps(self.data))
return 200
main.py (用于存放主文件)
# coding=utf-8
import logging
import time
import socketio
from botConfig.botClass import *
from botConfig.configInfo import *
sio = socketio.Client()
"""
By : Lan
Website : https://pan.lanol.cn/
"""
def beat():
while True:
sio.emit('GetWebConn', robotQQ)
time.sleep(60)
@sio.event
def connect():
print('connected to server')
sio.emit('GetWebConn', robotQQ) # 取得当前已经登录的QQ链接
beat() # 心跳包,保持对服务器的连接
@sio.on('OnGroupMsgs')
def OnGroupMsgs(message):
""" 监听群组消息"""
data = GroupMess(message['CurrentPacket']['Data'])
print(data)
return
@sio.on('OnFriendMsgs')
def OnFriendMsgs(message):
""" 监听好友消息 """
data = PrivateMess(message['CurrentPacket']['Data'])
print(data)
return
@sio.on('OnEvents')
def OnEvents(message):
""" 监听相关事件"""
print(message)
def main():
try:
sio.connect(webapi, transports=['websocket'])
sio.wait()
except BaseException as e:
logging.info(e)
print(e)
if __name__ == '__main__':
main()
GitHub地址:https://github.com/vastsa/OPQBot-Pyhon