Python-go-cqhttp原理和代码

我自己的机器人开源项目

go-cqhttp下载地址

import requests
import time
import pymysql.cursors
import bs4
import os

#-------------------------------------------
conn = pymysql.connect(
    host='localhost',  # MySQL服务器地址
    user='root',  # MySQL服务器端口号
    password='123456',  # 用户名
    charset='utf8',  # 密码
    port=3306,  # 端口
    db='sg',  # 数据库名称
)

cur = conn.cursor()
#-------------------------------------------
 
 
message_id_collect = [] #放入获取的消息ID以便进行判断是否有人说话
message_id_collect_again = [] #放入获取的消息ID以便进行判断是否有人说话
message_append = [] #添加获取的全部内容
 
class res_mess_html(): #获取网页的json
    def __init__(self,url,headers):
        self.url = url
        self.headers = headers
    def res_get_html(self): #获取最新的消息数据
        res = requests.get(url=self.url,headers=self.headers).json() #获取数据json
        mes_list = res["data"]["messages"] #键值取值
        for res_get_mes in mes_list: #循环获取全部内容
            #res_get = res_get_mes.replace(r'')
            message_append.append(res_get_mes)
            #print(message_append)
        return None
 
class res_mess_post(): #回答消息
    def res_separate_mes(self):
        mes_get_append = message_append[-1]  # 最新的消息记录
        mes_content = mes_get_append["message"]  # 拿取消息内容
        mes_content_sender = mes_get_append["sender"]["nickname"]  # 拿取消息发送者的名字
        print(">>>>>>>:获取:" + mes_content_sender + ':' + mes_content)  # 检查是否正常
 
        return mes_content
 
    def API_get_answer(self,mes_content):  # 聊天API的调用,并获取回答
        if mes_content == "涩图": #回答消息的第一优先级
            o=requests.get(url="https://api.lolicon.app/setu/v2",headers=headers).json()
            xinxi=o['data'][0] #json信息
            zuoping=xinxi['title'] #作品名字
            zuozhe=xinxi['author'] #作者
            oo=o["data"][-1]["urls"]['original']
            msg="[CQ:image,file={0}]    作品名字:{1}     作者:{2}".format(oo,zuoping,zuozhe)
#=========================================================新闻爬虫=========================================================
        elif mes_content == "新闻":
            paqu=requests.get("https://top.baidu.com/board?tab=realtime")
            content = paqu.text.encode('utf-8')
            soup = bs4.BeautifulSoup(content, 'lxml')
            pp=soup.find_all(class_="c-single-text-ellipsis")
            xinwen_list=[]
            for i in pp:
                xinwen_list.append(i.text)
            ppp=str(xinwen_list)
            pppp=ppp.replace( ',', '-----')
            ppppp=pppp.replace("'",'')
            msg=ppppp
            
#======================================================名字引擎============================================================
        elif  mes_content[0:2] == "mz":
            mz=mes_content[2:]
            sql0 = "SELECT * FROM shuju0 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            list_xinxi=[]
            cur.execute(sql0, params)
            rest = cur.fetchall()
            
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql2 = "SELECT * FROM shuju2 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql2, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql3 = "SELECT * FROM shuju3 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql3, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql4 = "SELECT * FROM shuju4 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql4, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql5 = "SELECT * FROM shuju5 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql5, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql6 = "SELECT * FROM shuju6 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql6, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql7 = "SELECT * FROM shuju7 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql7, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql8 = "SELECT * FROM shuju8 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql8, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql9 = "SELECT * FROM shuju9 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql9, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql10 = "SELECT * FROM shuju10 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql10, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql11 = "SELECT * FROM shuju11 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql11, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql12 = "SELECT * FROM shuju12 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql12, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            sql13 = "SELECT * FROM shuju13 WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(sql13, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            guanxiwang1 = "SELECT * FROM guanxiwang WHERE mingzi1 LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(guanxiwang1, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息


            guanxiwang2 = "SELECT * FROM guanxiwang WHERE mingzi2 LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(guanxiwang2, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            guanxiwang3 = "SELECT * FROM guanxiwang WHERE mingzi3 LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(guanxiwang3, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            qinshi = "SELECT * FROM qinshi WHERE mingzi LIKE %s;"
            params = ['%' + mz + '%']
            cur.execute(qinshi, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            list_xinxi.append(xinxi_jiaru)#加入信息

            msg=str(list_xinxi)

#====================================================寝室=================================================================
        elif  mes_content[0:2] == "qs":
            list_xinxi=[]
            qs=mes_content[2:]
            qinshi = "SELECT * FROM qinshi WHERE qinshi LIKE %s;"
            params = ['%' + qs + '%']
            cur.execute(qinshi, params)
            rest = cur.fetchall()
            xinxi_jiaru=str(rest) #元组转化为文本
            msg=xinxi_jiaru


#=====================================================图片名字============================================================
        elif  mes_content[0:2] == "tp":
            mztp=mes_content[2:]
            path = 'file:///D:/tp/'
            o = mztp + ".jpg"
            path1 = os.path.join(path, o)
            msg="[CQ:image,file={0}]名字:{1}".format(path1,mztp)
            
            
            
#======================================================名字引擎============================================================            
            
        else: #回答消息的第二优先级
            urls = "http://api.qingyunke.com/api.php?key=free&appid=0&msg={}".format(mes_content)
            answer_get = requests.get(url=urls, headers=headers).json()
            answer_content = answer_get["content"]  # 获取API回答的内容
            print(">>>>>>>:回答:" + answer_content)  # 检察是否可以正常运行
            msg = answer_content
 
          
        return msg
    def post_url(self,msg): #进行回复
        group_id = res_mes_post["group_id"]  # 群号
        urls = "http://127.0.0.1:5700/send_group_msg?group_id=" + group_id + "&message=" + msg
        answer_post_use = requests.post(url=urls, headers=headers).json()  # 发送消息
        print(">>>>>>>:已回答")
class answer_check():
    def answer_post_again(self):  # 发消息前的消息ID
        res_get_first = message_append[-1]
        res_mes_id = res_get_first["message_id"]
        message_id_collect.append(res_mes_id)
        nums = message_id_collect[-1]
        # print(nums)
        return nums  # 返回nums以便进行对比
 
    def answer_post_again_check(self):  # 发消息后的消息ID
        res_get_again = message_append[-2]
        res_mes_id_again = res_get_again["message_id"]
        message_id_collect_again.append(res_mes_id_again)
        numss = message_id_collect_again[-1]
        # print(numss)
        return numss  # 返回nums以便进行对比
 
class list_clear():
    def list_clears(self):  # 清除列表中的所有元素
        message_append.clear()
        message_id_collect.clear()
        message_id_collect_again.clear()
 
def get_F(url,headers):
    while True:
        # 实例化类
        res_post_mes = res_mess_html(url=url, headers=headers)
        res_mess_posts = res_mess_post()
 
        # 调用API实现机器人回复
        mes_content = res_mess_posts.res_separate_mes()
        msg = res_mess_posts.API_get_answer(mes_content=mes_content)
    return msg
def get_post(url,headers):
 
    while True:
        #实例化类
        res_post_mes = res_mess_html(url=url, headers=headers)
        res_mess_posts = res_mess_post()
        res_answer_check = answer_check()
 
        #获取发消息前的消息ID
        res_post_mes.res_get_html()
        n = res_answer_check.answer_post_again()
 
        #调用API实现机器人回复
        mes_content = res_mess_posts.res_separate_mes()
        msg = res_mess_posts.API_get_answer(mes_content=mes_content)
        post = res_mess_posts.post_url(msg=msg)
 
 
       #刷新页面准备循环拿取消息ID
        res_post_mes.res_get_html()
        time.sleep(1)
 
        while True:
            #循环获取最新消息的ID
            res_post_mes.res_get_html()
            m = res_answer_check.answer_post_again_check()
 
            time.sleep(1)
            # print(message_id_collect_again)
            if n == m: #比对消息ID验证是否有新消息  
                #print(">>>>>>>:无消息")
                s = list_clear()
                s.list_clears()#清除列表中的所有元素
                time.sleep(3)
                # print(message_append,message_id_collect,mes_content)
                pass
            else:
                #print(">>>>>>>:有消息")
                s= list_clear()
                s.list_clears()
                # print(message_append, message_id_collect, mes_content)
                break
if __name__ == '__main__':
 
    res_mes_post = {"instruction_message": "message_seq", "group_id": "579086236", "message_id": ""}
    message_group_id = res_mes_post["group_id"]
    url = "http://127.0.0.1:5700/get_group_msg_history?group_id=" + message_group_id
 
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}
 
    get_post(url=url,headers=headers)
    conn.close()
 
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四川财阀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值