日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QQ机器人制作教程,超详细

發布時間:2023/12/10 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QQ机器人制作教程,超详细 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 前期準備
    • 1、機器人框架的下載和配置
    • 2、python的配置和安裝
  • 具體實現
    • 1、發送信息
    • 2、獲取群成員列表
    • 3、接收上報的事件
    • 4、實現簡單的自動回復
    • 5、解決重復接收消息的問題(多次回復問題)
  • 第二、三篇文章實現更多功能
  • 完整項目下載地址(配置了python環境)
  • 完整項目下載地址(電腦沒有python環境)

完整項目包括框架、代碼和詳細使用說明可以去鏈接下載(下載完只需要按照使用說明修改幾處地方即可搭建成功!):
QQ機器人基礎版(文章1-2所有功能)
QQ機器人多功能版(文章1-3所有功能)

最新功能請看第二篇文章:搭建一個QQ機器人叫女朋友起床!

前期準備

1、機器人框架的下載和配置

(1)首先需要一個qq機器人框架,我使用的是基于mirai 以及 MiraiGo 開發的go-cqhttp(里面有開發文檔)。

框架下載地址
windows推薦下載這個,linux我沒試過自己去看文檔哈。

下載后解壓得到三個文件。

(2)雙擊exe文件,出現如下窗口,一直點擊確定就行了(3次):

然后會生成一個批處理文件,雙擊它(以后也是直接用它)


輸入0后回車,然后關閉,此時已經在原來的文件目錄下生成了配置文件config.yml。
(3)雙擊config.yml,輸入QQ號和密碼(建議使用無登錄保護的qq,否則可能出現滑塊驗證等問題)。

也可以不輸入賬號密碼,直接運行那個bat文件會出現二維碼掃碼登錄,這樣更加安全。

再轉到最后兩行,把前面的#去掉使其生效(很重要!!很重要!!)

(4)配置完后直接雙擊bat文件。等待一段時間出現如下窗口:

這兩個端口都應該出現(很重要):

更多問題請看幫助文檔。

補充:窗口可能會一直出現如下警告(這個不需要管,是正常現象):

窗口會一直顯示接收到信息,不要關閉

2、python的配置和安裝

電腦沒有python環境或者覺得配置太麻煩可直接購買exe版本,只要有電腦就可以運行。
QQ機器人基礎版exe
QQ機器人多功能版exe
同樣里面都有使用說明,配置更加方便

要實現自動回復功能的機器人需要借助一種語言,我選擇的是python。
所以需要電腦配置好python環境和安裝集成開發環境pycharm。安裝教程可以看我的文章—>>>python安裝詳細教程
當然在實現所有功能之前需要安裝一些第三方庫,這個不知道的也可以百度。

具體實現

1、發送信息

這包括發送私聊信息和發送群聊信息。下面的函數已經寫好了,直接調用函數傳入參數就行了。

import socket def send_msg(resp_dict):client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)ip = '127.0.0.1'client.connect((ip, 5700))msg_type = resp_dict['msg_type'] # 回復類型(群聊/私聊)number = resp_dict['number'] # 回復賬號(群號/好友號)msg = resp_dict['msg'] # 要回復的消息# 將字符中的特殊字符進行url編碼msg = msg.replace(" ", "%20")msg = msg.replace("\n", "%0a")if msg_type == 'group':payload = "GET /send_group_msg?group_id=" + str(number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"elif msg_type == 'private':payload = "GET /send_private_msg?user_id=" + str(number) + "&message=" + msg + " HTTP/1.1\r\nHost:" + ip + ":5700\r\nConnection: close\r\n\r\n"print("發送" + payload)client.send(payload.encode("utf-8"))client.close()return 0

(1)比如發送私聊信息(QQ用接收者的):

resp_dict={'msg_type':'private','number':QQ號,'msg':'你好'} send_msg(resp_dict)


(2)發送群聊信息(群號自己用一個):

send_msg({'msg_type': 'group', 'number': QQ群號, 'msg': '大家好'})

(3)當然不止發送文本信息,還可以發表情、圖片、音樂等。還可以艾特某人。
例如:發表情

send_msg({'msg_type': 'group', 'number': QQ群號, 'msg': '[CQ:shake]'})

發窗口抖動

send_msg({'msg_type': 'group', 'number': QQ群號, 'msg': '[CQ:shake]'})

還有很多CQcode可以去官方文檔查看:http://docs.go-cqhttp.org/cqcode/

2、獲取群成員列表

import requests def get_group(id):response = requests.post('http://127.0.0.1:5700/get_group_member_list?group_id='+str(id)).json()for i in response['data']:if(i['card']!=''):print(i['card']+str(i['user_id']))else:print(i['nickname']+str(i['user_id']))

直接調用即可(群號隨便用一個)

get_group(QQ群號)

會打印出所有群成員的群昵稱(未編輯群昵稱的打印QQ昵稱)和QQ號。

3、接收上報的事件

下面這個代碼命名為receive.py,之后方便調用(不要運行這個代碼,否則端口會沖突)。這個返回的是事件的上報信息,包括接收到的信息、加好友請求等等。

import socket import jsonListenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ListenSocket.bind(('127.0.0.1', 5701)) ListenSocket.listen(100)HttpResponseHeader = '''HTTP/1.1 200 OK\r\n Content-Type: text/html\r\n\r\n '''def request_to_json(msg):for i in range(len(msg)):if msg[i]=="{" and msg[-1]=="\n":return json.loads(msg[i:])return None#需要循環執行,返回值為json格式 def rev_msg():# json or NoneClient, Address = ListenSocket.accept()Request = Client.recv(1024).decode(encoding='utf-8')rev_json=request_to_json(Request)Client.sendall((HttpResponseHeader).encode(encoding='utf-8'))Client.close()return rev_json

4、實現簡單的自動回復

需要寫一個while循環一直接收返回的rev,然后根據字段里面的信息做出回應。

下面的代碼需要改一處地方,改為你機器人的QQ號。

可以把下面的代碼命名為main.py,之后的代碼都是在這里面加的。需要一直運行,不能關閉。

if rev["post_type"] == "message":#print(rev) #需要功能自己DIYif rev["message_type"] == "private": #私聊if rev['raw_message']=='在嗎':qq = rev['sender']['user_id']send_msg({'msg_type':'private','number':qq,'msg':'我在'})elif rev["message_type"] == "group": #群聊group = rev['group_id']if "[CQ:at,qq=機器人的QQ號]" in rev["raw_message"]:if rev['raw_message'].split(' ')[1]=='在嗎':qq=rev['sender']['user_id']send_msg({'msg_type':'group','number':group,'msg':'[CQ:poke,qq={}]'.format(qq)})else:continueelse: # rev["post_type"]=="meta_event":continue

上述代碼實現的是,當私聊對方發送在嗎時回復我在;當群聊有人艾特并發送在嗎時會戳一戳對方。


大家也可以去官方文檔查看所有的事件和API,實現各種各樣的功能。

5、解決重復接收消息的問題(多次回復問題)

接收本地端口的數據時會有重復的報文(大概6次),就像這樣:

解決辦法一:
出現這種問題的小伙伴檢查一下receive.py,其中的HttpResponseHeader應該和我這樣才對。

解決辦法二:(不推薦,比較麻煩)
查看了一下接收到的數據,發現每條信息會被重復接收,于是在while循環里修改對接收數據的處理。
這就需要判斷消息的id,如果遇到重復消息id的數據就不做處理。

(1)在while循環外面增加一個列表

判斷接收數據的message_id是否在列表里,在的話就說明是重復數據,那就不處理。并且由于程序一直在運行,list會不斷變大,于是我加了一個判斷,如果列表長度大于50就清空。
(2)接收數據的代碼替換成以下代碼
以前是這樣:

修改之后:

rev = rev_msg()id=rev['message_id']if(len(id_list)>=50):id_list=[]print(id_list)#print(time1==time2)if id not in id_list:id_list.append(id)print(rev)else:continue

這樣就不會出現重復接收數據的情況。

第二、三篇文章實現更多功能

實現了更多功能,包括定時發送消息、智能聊天、天氣、星座運勢、生日書、獲取歌詞、點歌、爆照等等。
第二文章地址:搭建一個QQ機器人叫女朋友起床!
第三篇文章地址:搭建一個多功能機器人詳細教程
首先感謝大家對本文的支持,第二、三篇文章功能更多,跪求大家的支持!!!

完整項目下載地址(配置了python環境)

完整項目包括框架、代碼和詳細使用說明可以去鏈接下載(下載完只需要按照使用說明修改幾處地方即可搭建成功!):
QQ機器人基礎版(文章1-2所有功能)
QQ機器人多功能版(文章1-3所有功能)


使用說明是word版本,說的十分詳細,分為以下四個方面:

完整項目下載地址(電腦沒有python環境)

電腦沒有python環境或者覺得配置太麻煩可直接購買exe版本,只要有電腦就可以運行!!
QQ機器人基礎版exe
QQ機器人多功能版exe
同樣里面都有使用說明,配置更加方便(強烈推薦)!!


但是這也有一個壞處,就是不可編程修改,功能已經固定了,十分適合新手!!

個人主頁(含在線語音對話機器人和一些有趣的功能):皮小孩的個人主頁

總結

以上是生活随笔為你收集整理的QQ机器人制作教程,超详细的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。