发布时间:2025-12-10 19:14:35 浏览次数:5
趣味项目—MyQQ机器人(一)「终于解决」qq机器人
趣味项目—MyQQ机器人(一)
前段时间看到了这个框架,感觉很有意思,学院有个学弟也开发了一个机器人放在群里,所以我也试了一试。花了一上午时间,有了一个雏形,还挺好玩的,在开发的过程中还可以复习和学习python的语法和应用。最近太忙了,要复习功课和数学,只能慢慢更新了。
进入MyQQ官网下载中心,下载这两个,进入开发文档按照新手教程进行配置,有一个地方文档没细说,要想正常使用是一定要设置回调端口的,教程里面只教设置监听端口,这些端口都要是其他系统任务和用户任务没用的,一般来说8888和8889没问题。
from http.server import HTTPServer, BaseHTTPRequestHandlerimport jsonimport urllib.parseimport randomimport requestslistb = { 1: '在食堂', 2: '在公教', 3: '在床上', 4: '在运动场', 5: '在不显山'}lista = { 1: '在食堂', 2: '在公教', 3: '在床上', 4: '在运动场', 5: '在不显山'}listd = { 1: '在学习', 2: '玩游戏', 3: '打篮球', 4: '在吃饭', 5: '迷路了'}listc = { 1: '在学习', 2: '玩游戏', 3: '打篮球', 4: '在吃饭', 5: '迷路了'}host = ('localhost', 8890)url = 'http://localhost:8889/MyQQHTTPAPI'code='101190801'url1='http://www.weather.com.cn/data/cityinfo/%s.html'% codedata1 = { "function": "Api_SendMsg", #要调用的函数英文名(查看右侧API列表)"token": "hhh007", #后台设置的token"params": { "c1": "350xxxxx75", #参数1,要使用的机器人QQ"c2": "2", #参数2,消息类型,2为群,以此类推..."c3": "102xxxxx80", #参数3,要发送的群号,以此类推..."c4": "", #参数4,要发送的QQ,此处发的是群,所以这个要留空,以此类推..."c5": "休息一下" #参数5,要发送的消息内容,以此类推...}}data5 = { "function": "Api_SendMsg", #要调用的函数英文名(查看右侧API列表)"token": "hhh007", #后台设置的token"params": { "c1": "350xxxxx75", #参数1,要使用的机器人QQ"c2": "2", #参数2,消息类型,2为群,以此类推..."c3": "102xxxxx80", #参数3,要发送的群号,以此类推..."c4": "", #参数4,要发送的QQ,此处发的是群,所以这个要留空,以此类推..."c5": "恒神我好爱你" #参数5,要发送的消息内容,以此类推...}}class Resquest(BaseHTTPRequestHandler):def do_POST(self):datas = self.rfile.read(int(self.headers['content-length'])).decode()datas = json.loads(datas)msg = urllib.parse.unquote(datas['MQ_msg'])if int(datas['MQ_type'])==2:print(datas['MQ_fromID'],datas['MQ_fromQQ'],msg)if datas['MQ_fromQQ'] == "105xxxxx94":requests.post(url=url, json=data5)if msg == "恒神":requests.post(url=url, json=data1)if msg == "天气":obj=urllib.request.urlopen(url1)data_b = obj.read()data_s = data_b.decode('utf-8')data_dict = json.loads(data_s)rt = data_dict['weatherinfo']my_rt = ('%s,%s,%s~%s') % (rt['city'], rt['weather'], rt['temp1'], rt['temp2'])data2 = { "function": "Api_SendMsg", # 要调用的函数英文名(查看右侧API列表)"token": "hhh007", # 后台设置的token"params": { "c1": "35xxxxx75", # 参数1,要使用的机器人QQ"c2": "2", # 参数2,消息类型,2为群,以此类推..."c3": "10xxxxx80", # 参数3,要发送的群号,以此类推..."c4": "", # 参数4,要发送的QQ,此处发的是群,所以这个要留空,以此类推..."c5": my_rt # 参数5,要发送的消息内容,以此类推...}}requests.post(url=url, json=data2)if msg == "我在哪":a = random.sample(lista.keys(), 1) # 随机一个字典中的key,第二个参数为限制个数b = a[0]data3 = { "function": "Api_SendMsg", # 要调用的函数英文名(查看右侧API列表)"token": "hhh007", # 后台设置的token"params": { "c1": "350xxxxx75", # 参数1,要使用的机器人QQ"c2": "2", # 参数2,消息类型,2为群,以此类推..."c3": "102xxxxx80", # 参数3,要发送的群号,以此类推..."c4": "", # 参数4,要发送的QQ,此处发的是群,所以这个要留空,以此类推..."c5": lista[b] # 参数5,要发送的消息内容,以此类推...}}requests.post(url=url, json=data3)if msg == "我在干什么":c = random.sample(listc.keys(), 1) # 随机一个字典中的key,第二个参数为限制个数d = c[0]data4 = { "function": "Api_SendMsg", # 要调用的函数英文名(查看右侧API列表)"token": "hhh007", # 后台设置的token"params": { "c1": "350xxxxx75", # 参数1,要使用的机器人QQ"c2": "2", # 参数2,消息类型,2为群,以此类推..."c3": "102xxxxx80", # 参数3,要发送的群号,以此类推..."c4": "", # 参数4,要发送的QQ,此处发的是群,所以这个要留空,以此类推..."c5": listc[d] # 参数5,要发送的消息内容,以此类推...}}requests.post(url=url, json=data4)#print('headers', self.headers)#print("do post:", self.path, self.client_address, datas)if __name__ == '__main__':server = HTTPServer(host, Resquest)print("Starting server, listen at: %s:%s" % host)server.serve_forever() 是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!
【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…
用的是http的post方法,在百度一搜就有,也是csdn上的博客,据博主所说,现在的代码安全性是待考虑的,不过我就拿来玩玩,应该没什么问题。
现在设计了几个小功能,
datas = self.rfile.read(int(self.headers['content-length'])).decode()datas = json.loads(datas)msg = urllib.parse.unquote(datas['MQ_msg']) 这是对QQ消息的监听,我想应该和当时计网实验的时候一样,这是对udp抓包,这里好像是解析从服务器来的json文件,细节就不再追究了,得到msg也就是qq里面的消息,其实json文件里面有很多东西
下面就是为了整蛊我同学
if datas['MQ_fromQQ'] == "105xxxxx94":requests.post(url=url, json=data5)if msg == "恒神":requests.post(url=url, json=data1) 只要监听到消息来自我同学的QQ,机器人就会马上自动发送诸如我爱你的消息。监听到群里有人发某个消息也会做出反应,让他休息一下
这是调用了一个天气的接口进行json解析,有人发天气就会查询我们这当地的天气发到群里
if msg == "天气":obj=urllib.request.urlopen(url1)data_b = obj.read()data_s = data_b.decode('utf-8')data_dict = json.loads(data_s)rt = data_dict['weatherinfo']my_rt = ('%s,%s,%s~%s') % (rt['city'], rt['weather'], rt['temp1'], rt['temp2'])data2 = { "function": "Api_SendMsg", # 要调用的函数英文名(查看右侧API列表)"token": "hhh007", # 后台设置的token"params": { "c1": "35xxxxx75", # 参数1,要使用的机器人QQ"c2": "2", # 参数2,消息类型,2为群,以此类推..."c3": "10xxxxx80", # 参数3,要发送的群号,以此类推..."c4": "", # 参数4,要发送的QQ,此处发的是群,所以这个要留空,以此类推..."c5": my_rt # 参数5,要发送的消息内容,以此类推...}}requests.post(url=url, json=data2) 下面就是一个玩具了,大家经常玩内卷游戏,就跟玩骰子一样,只要发了我在哪、我在干什么就会从字典里面随机发送键值,这样可以证明自己的清白
if msg == "我在哪":a = random.sample(lista.keys(), 1) # 随机一个字典中的key,第二个参数为限制个数b = a[0]data3 = { "function": "Api_SendMsg", # 要调用的函数英文名(查看右侧API列表)"token": "hhh007", # 后台设置的token"params": { "c1": "350xxxxx75", # 参数1,要使用的机器人QQ"c2": "2", # 参数2,消息类型,2为群,以此类推..."c3": "102xxxxx80", # 参数3,要发送的群号,以此类推..."c4": "", # 参数4,要发送的QQ,此处发的是群,所以这个要留空,以此类推..."c5": lista[b] # 参数5,要发送的消息内容,以此类推...}}requests.post(url=url, json=data3)if msg == "我在干什么":c = random.sample(listc.keys(), 1) # 随机一个字典中的key,第二个参数为限制个数d = c[0]data4 = { "function": "Api_SendMsg", # 要调用的函数英文名(查看右侧API列表)"token": "hhh007", # 后台设置的token"params": { "c1": "350xxxxx75", # 参数1,要使用的机器人QQ"c2": "2", # 参数2,消息类型,2为群,以此类推..."c3": "102xxxxx80", # 参数3,要发送的群号,以此类推..."c4": "", # 参数4,要发送的QQ,此处发的是群,所以这个要留空,以此类推..."c5": listc[d] # 参数5,要发送的消息内容,以此类推...}}requests.post(url=url, json=data4) 后面想学一学诸如爬虫什么的和pandas之类的可以丰富功能,也可以学一学知识。