pythonQQ机器人系列:使用requests实现QQ机器人聊天(1-0)

系列文章目录

基础:requests的基本使用:QQ机器人基础  传送门

pythonQQ机器人系列:使用requests实现QQ机器人聊天(0-2) 传送门

pythonQQ机器人系列:使用requests实现QQ机器人聊天(2-0)传送门


目录

系列文章目录

前言

一.源代码

二.源代码讲解

main源代码讲解

get源代码讲解

 post源代码讲解(多群喊话)


 

前言

建议使用(2-0)的代码,比这个好用

此文章继承前面的文章,这次更新了本地词库的回答和多群回话,并且这个文章从新讲解源代码,为了大家更好的阅读不能像前面那样更新,都在一篇文章上,对看文章的人来说也并不友好,所以一篇文章咱们也就更新或优化二到三次,就会出下一篇文章,重新介绍。

最后谢谢大家的支持。

 下载go-cqhttp。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

 找一个属于自己机器版本的下载即可,下载完后自行运行程序并加载好,360等可能会弹提示,这个是无毒的可以放心。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

 其他的是不需要改动的,改好后在运行一次go-cqhttp.bat就行了。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KW_6Zeo5ZW46Zuq,size_20,color_FFFFFF,t_70,g_se,x_16

 这个样就算是启动好了,当然有些可能开了设备锁,这个自行解决就可以了,有些时候扫码弄设备锁会弹链接,复制一下到浏览器打开扫一下就行了。

当然,大家也可能会遇到风控,当然风控是不会封号的,只是限制了你不能用框架了,把QQ号晾几天,水水群就行了。


一.源代码

这次,各个文件给分开进行编写,下面是文件的图示

144435f837bc4e2c9bd83138d3831080.png

84f30f759883471ca624b8e65a736b6c.png

下面分别是main,get,post文件的源代码 

 

#main的源代码
import time
import BF2_API_get

def main_system(url,headers):
    while True:
        # 实例化
        example_get_mess_html = BF2_API_get.get_mess_html(url,headers)
        example_post_mess_html = BF2_API_get.get_mess_aggregate()
        example_answer_check = BF2_API_get.answer_check()
        example_answer_logic = BF2_API_get.answer_logic()
        example_post_mes = BF2_API_get.post_mes()
        # 新消息检查
        example_get_mess_html.res_get_html()

        self_qq_again = example_answer_check.answer_post_qq()

        if self_qq_again == self_qq:  # 对比QQ号验证是否有新消息
            print('>>>:' * 3 + '无消息')
            example_clear = BF2_API_get.list_clear()
            clear = example_clear.list_clears()  # 清除集合中的所有元素
            time.sleep(3)

            pass
        else:
            print('>>>:' * 3 + '新消息')
            # 调用API实现机器人回复

            #获取新消息
            mes_content = example_post_mess_html.separate_mes_html()
            #获取回答消息
            msg = example_answer_logic.get_API_answer(mes_content=mes_content)

            #进行提交回复消息
            post_msg = example_post_mes.post_mes_API(msg=msg, group_id=group_id)

            time.sleep(2)

            example_clear = BF2_API_get.list_clear()
            clear = example_clear.list_clears()  # 清除集合中的所有元素
            if msg == "接收消息中......":
                BF2_API_get.Pending_implementation().shouting()
                print('已退出.............')


if __name__ == '__main__':
    res_mes_post = {"instruction_message": "message_seq","group_id": "736038975"}
    group_id = res_mes_post["group_id"]#自行修改QQ群号
    url = "http://127.0.0.1:5700/get_group_msg_history?group_id=" + group_id
    self_qq = 2712065523#qq机器人的QQ
    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"}


    main_system(url=url, headers=headers)

 

#get源代码
import requests
import pandas as pd  # 准备实现本地词库
import BF2_API_post
import time


path = 'words\word.xlsx'  # 本地词库路径
message_append = []  # 添加获取的全部内容

data_word = pd.read_excel(path)
word_question = data_word.loc[:, 'question']  # 读取question内容
word_answer = data_word.loc[:, 'answer']  # 读取answer内容
total = data_word.shape[0]  # data.shape可以获取行列的总数



class get_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:  # 循环获取全部内容

            message_append.append(res_get_mes)

        return None


class get_mess_aggregate():  # 回答消息


    def separate_mes_html(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
class answer_logic():

    def get_API_answer(self,mes_content):  # 本地词库一级回答
        # 回答消息的第一优先级
        # 放到前面提前处理

        num = 0
        for num in range(total):
            num = +num  # 前加的意思是先进行一次运行下一次再 +1
            answer_Pre_post = str(word_question[num])
            '''
            因为回答的消息在同行,所以后面也是num。
            因为xlsx里面的数字是int类型,我们获取的消息里面的数字是str
            所以要用str转化一下,这个漏洞我找了好久
            哭~~~~~。
            '''
            if mes_content == answer_Pre_post:
                msg = word_answer[num]

                return msg  # 弹出本地词库消息,便于下面发送
            else:
                pass

        if mes_content == "菜单":  # 回答消息的第二优先级

            msg = "聊天\n多群喊话\n继续加油"#\n可以实现多行输出
            return msg
        elif mes_content == "多群喊话":
            #_API_post.Multi_group_shouting().Get_group_list()
            #_API_post.Multi_group_shouting().Shouting_realization(mes_content)
            #print('>>>:' * 3 +"已完成多群喊话 ")
            msg = '接收消息中......'
            return msg

        else:  # 回答消息的第三优先级

            urls = "http://api.qingyunke.com/api.php?key=free&appid=0&msg={}".format(mes_content)
            answer_get = requests.get(url=urls).json()
            answer_content = answer_get["content"]  # 获取API回答的内容
            print('>>>:' * 3 + "回答:" + answer_content)  # 检察是否可以正常运行
            msg = answer_content
            return msg


class post_mes():
    def post_mes_API(self, msg, group_id):  # 进行回复

        urls = "http://127.0.0.1:5700/send_group_msg?group_id=" + group_id + "&message=" + str(msg)
        answer_post_use = requests.post(url=urls).json()  # 发送消息
        print('>>>:' * 3 + "已回答")

class answer_check():  # 检查消息是否刷新

    def answer_post_qq(self):  # 获取发送者的QQ号
        poster_qq = message_append[-1]["sender"]["user_id"]

        return poster_qq  # 对比自身QQ号


class list_clear():
    def list_clears(self):  # 清除列表中的所有元素

        message_append.clear()
        return None

class Pending_implementation():#使用这个类实现各种功能的使用,相当于一个中转站
    def shouting(self):
        res_mes_post = {"instruction_message": "message_seq", "group_id": "736038975"}
        group_id = res_mes_post["group_id"]
        url = "http://127.0.0.1:5700/get_group_msg_history?group_id=" + group_id
        self_qq = 2712065523
        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"}

        group_id_list = []
        group_name_list = []

        while True:
            # 实例化
            example_get_mess_html = get_mess_html(url, headers)
            example_post_mess_html = get_mess_aggregate()
            example_answer_check = answer_check()
            example_answer_logic = answer_logic()
            example_post_mes = post_mes()
            # 新消息检查
            example_get_mess_html.res_get_html()

            self_qq_again = example_answer_check.answer_post_qq()

            if self_qq_again == self_qq:  # 对比QQ号验证是否有新消息
                print('>>>:' * 3 + '无消息')
                example_clear = list_clear()
                clear = example_clear.list_clears()  # 清除集合中的所有元素
                time.sleep(3)

                pass
            else:
                print('>>>:' * 3 + '新消息')
                # 调用API实现机器人回复
                # 获取新消息
                mes_content = example_post_mess_html.separate_mes_html()
                BF2_API_post.Multi_group_shouting().Get_group_list()
                BF2_API_post.Multi_group_shouting().Shouting_realization(mes_content)



                time.sleep(2)

                example_clear = list_clear()
                clear = example_clear.list_clears()  # 清除集合中的所有元素

                break

 

#post源代码
import requests

group_id_list = []
group_name_list = []

class  Multi_group_shouting(): #实现多群喊话

    def Get_group_list(self):#获取群列表
        url = 'http://127.0.0.1:5700/get_group_list'
        res = requests.get(url=url).json()
        message_group_list = res['data']

        for list in message_group_list:#将群添加到集合中
            group_id = list['group_id']
            group_name = list['group_name']
            # print(list['group_id'],list['group_name'])
            group_id_list.append(group_id)
            group_name_list.append(group_name)
            print(group_name, group_id, '已添加')
        return None

    def Shouting_realization(self,word):
        num = 0
        for list in group_id_list:
            url = 'http://127.0.0.1:5700/send_group_msg?group_id=' + str(list) + '&message=' + str(word)
            req = requests.post(url=url).text

            name_group = group_name_list[num]
            num = num + 1
            print(name_group, list, "已发送")
        return None


if __name__ == '__main__':
    url = 'http://127.0.0.1:5700/get_group_list'

    word = str(input("ee:"))
    Multi_group_shouting().Get_group_list()
    Multi_group_shouting().Shouting_realization(word)

二.源代码讲解

main源代码讲解

我们此处只讲一个逻辑,便于下面的查看,后面再细讲。

import time
import BF2_API_get



def main_system(url,headers):
    while True:
        # 实例化
        example_get_mess_html = BF2_API_get.get_mess_html(url,headers)
        example_post_mess_html = BF2_API_get.get_mess_aggregate()
        example_answer_check = BF2_API_get.answer_check()
        example_answer_logic = BF2_API_get.answer_logic()
        example_post_mes = BF2_API_get.post_mes()
        # 新消息检查
        example_get_mess_html.res_get_html()

        self_qq_again = example_answer_check.answer_post_qq()

        if self_qq_again == self_qq:  # 对比QQ号验证是否有新消息
            print('>>>:' * 3 + '无消息')
            example_clear = BF2_API_get.list_clear()
            clear = example_clear.list_clears()  # 清除集合中的所有元素
            time.sleep(3)

            pass
        else:
            print('>>>:' * 3 + '新消息')
            # 调用API实现机器人回复

            #获取新消息
            mes_content = example_post_mess_html.separate_mes_html()
            #获取回答消息
            msg = example_answer_logic.get_API_answer(mes_content=mes_content)

            #进行提交回复消息
            post_msg = example_post_mes.post_mes_API(msg=msg, group_id=group_id)

            time.sleep(2)

            example_clear = BF2_API_get.list_clear()
            clear = example_clear.list_clears()  # 清除集合中的所有元素
            if msg == "接收消息中......":
                BF2_API_get.Pending_implementation().shouting()
                print('已退出.............')


if __name__ == '__main__':
    res_mes_post = {"instruction_message": "message_seq","group_id": "736038975"}
    group_id = res_mes_post["group_id"]
    url = "http://127.0.0.1:5700/get_group_msg_history?group_id=" + group_id
    self_qq = 2712065523
    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"}


    main_system(url=url, headers=headers)

 首先我们先实例化类(也就是给他们换个名字,把他们的名字变短一点),对于实现QQ群里面的回复,我们需要下面的几步操作。

 

一.获取最新的群消息

二.等待新消息

     1.新消息出现,先查找本地词库是否有这个词,如果没有,再对比设置的二级回复,,如果前面都没有,最后使用网上的聊天机器人进行回答

    2.回答完后提交给QQ,上传消息

三.重新循环

 

这就是大概的逻辑,我们也就会按照这个逻辑,进行程序的编写。

 

get源代码讲解

import requests
import pandas as pd  # 准备实现本地词库
import BF2_API_post 
import time

正常的引入库,我们使用pandas这个库准备实现本地词库的回答,我们到讲post的时候讲pandas。

class get_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:  # 循环获取全部内容

            message_append.append(res_get_mes)

        return None

这部分的代码就是拿取群历史消息了,关于键值取值什么的前面讲了,也就不多说了,下面是图示,拿取所有的消息,并添加到列表中。

26e558be794a48e7bb75f362d2f44fa1.png

 我们再通过下面的代码进一步提取信息,我们只需要最新的消息,所有直接索引最后一个消息集合,再通过键值取值的方法拿取发送者的名字与内容,最后将内容弹出,我们对名字不感兴趣。

class get_mess_aggregate():  # 回答消息


    def separate_mes_html(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

下面是我们的逻辑回复的部分,因为我们要实现本地词库的回答,所以我就将本地词库的回答设置为一级回复(也就for循环是放在了if上面,return弹出后,后面的内容也就不再执行,如果没有弹出msg,就继续执行下面的内容,所以可以算一个一级回复) ,对于其他的回复也就放到了下面,我下面所写的二级回复,也就是“菜单”那个,说实话,也没多大用,还有消息可以用“\n”实现多行发送消息(下有图示),这里为什么多群喊话弹出的msg是“接收消息”,对于这个问题,到下面再说,或者去main源代码里的最下面看看,我没想出什么好招来实现多群喊话我好菜),对于最后的第三优先级回复我们就是使用的青客云的聊天机器人(下有图示)了,在咱还没训练出机器人之前,也只能用这种机器人了。

class answer_logic():

    def get_API_answer(self,mes_content):  # 本地词库一级回答
        # 回答消息的第一优先级
        # 放到前面提前处理

        num = 0
        for num in range(total):
            num = +num  # 前加的意思是先进行一次运行下一次再 +1
            answer_Pre_post = str(word_question[num])
            '''
            因为回答的消息在同行,所以后面也是num。
            因为xlsx里面的数字是int类型,我们获取的消息里面的数字是str
            所以要用str转化一下,这个漏洞我找了好久
            哭~~~~~。
            '''
            if mes_content == answer_Pre_post:
                msg = word_answer[num]

                return msg  # 弹出本地词库消息,便于下面发送
            else:
                pass

        if mes_content == "菜单":  # 回答消息的第二优先级

            msg = "聊天\n多群喊话\n继续加油"#\n可以实现多行输出
            return msg
        elif mes_content == "多群喊话":
            #_API_post.Multi_group_shouting().Get_group_list()
            #_API_post.Multi_group_shouting().Shouting_realization(mes_content)
            #print('>>>:' * 3 +"已完成多群喊话 ")
            msg = '接收消息中......'
            return msg

        else:  # 回答消息的第三优先级

            urls = "http://api.qingyunke.com/api.php?key=free&appid=0&msg={}".format(mes_content)
            answer_get = requests.get(url=urls).json()
            answer_content = answer_get["content"]  # 获取API回答的内容
            print('>>>:' * 3 + "回答:" + answer_content)  # 检察是否可以正常运行
            msg = answer_content
            return msg

"\n"的使用

52560b85ab484ccd874c75fd40ddfaa8.png

a34ae14ce3fd4719a4eb0909f85324d1.png

 青客云聊天机器人

183e8fe4e668406db12242109136676f.png

 78d49a0230c84028a3aee85c6277865f.png

  一级回复代码讲解

path = 'words\word.xlsx'  # 本地词库路径
data_word = pd.read_excel(path)
word_question = data_word.loc[:, 'question']  # 读取question内容
word_answer = data_word.loc[:, 'answer']  # 读取answer内容
total = data_word.shape[0]  # data.shape可以获取行列的总数



num = 0
for num in range(total):
    num = +num  # 前加的意思是先进行一次运行下一次再 +1
    answer_Pre_post = str(word_question[num])
    '''
            因为回答的消息在同行,所以后面也是num。
            因为xlsx里面的数字是int类型,我们获取的消息里面的数字是str
            所以要用str转化一下,这个漏洞我找了好久
            哭~~~~~。
    '''
    if mes_content == answer_Pre_post:
        msg = word_answer[num]

        return msg  # 弹出本地词库消息,便于下面发送
    else:
        pass

 70ab8beb5ca449b6b9daeed2a48c2452.png

 

上面的代码包含了整个get源代码上面那一块没有被放进类里面的代码以及回复逻辑类中的代码,为什么我把这两块代码分开了呢,因为我感觉如果回复消息的时候去运行前面的代码,浪费时间,所以就把他们丢到了外面,他们的值本来就是不变的所以先去运行他们后,应该可以节省时间。

 path进行设置路径,后面用pandas进行读取文件,用data_word.loc[:, 'question'],可以读取整个question这一列,相应的data_word.loc[:, 'answer'],也可以读取整个answer这一列(下有图示)。

 98c74cfe70084afd9b4bc1ede3ddd66f.png

 至于total = data_word.shape,可以获取数据的维度,下图所示

a6df52c4b2c24aab8c383b7759162e3f.png

 前面是行,后面是列,我们只需要行数,所以索引4就可以了。

话说,为什么我要用这个行呢?因为你的词库的遍历是有限的,要是无限的遍历,会出现你最喜欢的,红色的,error,error,error,所以知道害怕了吧(好像也就我会怕,我好菜)。

fcc11c6fffc741ee94981f010820d987.png

 下面代码的num = +num意思是先运行一次后再加一,这就是后加(是后加吧?,还是前加,额~,算了不管了,反正不重要,懂了就行),通过这样一次一次的循环,遍历完所有的词。

 额,至于我为什么要用str,answer_Pre_post = str(word_question[num]),你可以看见Excel中我弄了一个“666”,这玩意获取出来,是“int类型”,而“mes_content”又是“str类型”,所以就必须转化一下(话说,这玩意整了我好久才找出他来,这个bug真气死我了),下面也简单的让大家看一下他们的索引。

 7cc87ebc6eee4c2985634e0fb91f3a80.png

 所以,因为所对应的回答在同一列,所以他们后面的索引也都是num,最后弹出msg就可以了,当然如果本地词库里面没有回复,他就继续往下运行了。

 

class post_mes():
    def post_mes_API(self, msg, group_id):  # 进行回复

        urls = "http://127.0.0.1:5700/send_group_msg?group_id=" + group_id + "&message=" + str(msg)
        answer_post_use = requests.post(url=urls).json()  # 发送消息
        print('>>>:' * 3 + "已回答")

 这个类,就单纯的实现QQ消息的发送也并没有什么好讲的(你们应该都会,相信你们),如果不懂这个url的话,可以去看看我前面写的以及go-cqhttp这个。

 

 

class answer_check():  # 检查消息是否刷新

    def answer_post_qq(self):  # 获取发送者的QQ号
        poster_qq = message_append[-1]["sender"]["user_id"]

        return poster_qq  # 对比自身QQ号


class list_clear():
    def list_clears(self):  # 清除列表中的所有元素

        message_append.clear()
        return None

 这个两个类也就合起来讲了,这两个类也是很简单,第一个单纯在前面的列表中拿取最后一个消息中发送者的QQ号,然后把QQ号弹出。第二个,额,这个还需要讲???就把那个放内容的列表清空。

 当然下面还有一块重头戏,我们现在先跳过去,因为下面那个是多群喊话这个功能实现的一个中转站我是比着我先写好的main源代码改的

 post源代码讲解(多群喊话)

import requests

group_id_list = []
group_name_list = []

class  Multi_group_shouting(): #实现多群喊话

    def Get_group_list(self):#获取群列表
        url = 'http://127.0.0.1:5700/get_group_list'
        res = requests.get(url=url).json()
        message_group_list = res['data']

        for list in message_group_list:#将群添加到集合中
            group_id = list['group_id']
            group_name = list['group_name']
            # print(list['group_id'],list['group_name'])
            group_id_list.append(group_id)
            group_name_list.append(group_name)
            print(group_name, group_id, '已添加')
        return None

    def Shouting_realization(self,word):
        num = 0
        for list in group_id_list:
            url = 'http://127.0.0.1:5700/send_group_msg?group_id=' + str(list) + '&message=' + str(word)
            req = requests.post(url=url).text

            name_group = group_name_list[num]
            num = num + 1
            print(name_group, list, "已发送")
        return None


if __name__ == '__main__':
    url = 'http://127.0.0.1:5700/get_group_list'

    word = str(input("ee:"))
    Multi_group_shouting().Get_group_list()
    Multi_group_shouting().Shouting_realization(word)

 ba3bde0a1b1c44ce970144e712ed95de.png

 2670f84d2a2f4bbcb004290ffac19796.png

 

 我们先在头顶上方上两个列表,一个存获取的群号,另一个存名字。再我们定义类,一个获取信息,另一个发送消息。对于我们的获取消息的类,也是不麻烦,通过键值取值的方法,拿取群号和群名,然后添加到列表中。发送消息的类,用切片的方法拿取列表中的群号与群名,当然url只需要群号,群名我们在输出中使用(就这么点破代码,还整了我好久的时间,我人麻了)。

 main源代码以及get源代码的结尾

首先,main中的实例化类我们不在多讲,进行消息的检查,需要刷新页面也就是需要如下,通过下面进行刷新页面,以及拿取检查所需要的QQ号

# 新消息检查
example_get_mess_html.res_get_html()
self_qq_again = example_answer_check.answer_post_qq()

 下面便是检查消息是否为新消息,通过对比自身的QQ号来判定,当然这样也是有缺陷的,不过对于现在的我们来说是最好的。

如果相等,就是没有消息,清除掉列表中的内容,重新循环。

如果不相等,就是有新消息。

#获取新消息
mes_content = example_post_mess_html.separate_mes_html()
#获取回答消息
msg = example_answer_logic.get_API_answer(mes_content=mes_content)
#进行提交回复消息
post_msg = example_post_mes.post_mes_API(msg=msg, group_id=group_id)

time.sleep(2)

example_clear = BF2_API_get.list_clear()
clear = example_clear.list_clears()  # 清除集合中的所有元素

这些就是正常的获取消息内容,把消息内容传递给逻辑回复的类,进行判断进行几级回复,然后提交回复内容,再清除列表中的内容。

if msg == "接收消息中......":
    BF2_API_get.Pending_implementation().shouting()
    print('已退出.............')

 因为最上面我们已经引入过post源码了

import BF2_API_get

所以,我们调用get源码中的中转站的类,进行多群喊话的中转。

在这里解释一下,为什么要用中转,因为需要多群喊话,所以,就必须让代码捕捉到我们要喊话的内容,而单纯的我们上面的代码,是不具备捕捉喊话内容的功能的,所以我们就通过这个中转站实现捕捉内容,这个中转站的内容跟main源码差不多。

class Pending_implementation():#使用这个类实现各种功能的使用,相当于一个中转站
    def shouting(self):
        res_mes_post = {"instruction_message": "message_seq", "group_id": "736038975"}
        group_id = res_mes_post["group_id"]
        url = "http://127.0.0.1:5700/get_group_msg_history?group_id=" + group_id
        self_qq = 2712065523
        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"}

        group_id_list = []
        group_name_list = []

        while True:
            # 实例化
            example_get_mess_html = get_mess_html(url, headers)
            example_post_mess_html = get_mess_aggregate()
            example_answer_check = answer_check()
            example_answer_logic = answer_logic()
            example_post_mes = post_mes()
            # 新消息检查
            example_get_mess_html.res_get_html()

            self_qq_again = example_answer_check.answer_post_qq()

            if self_qq_again == self_qq:  # 对比QQ号验证是否有新消息
                print('>>>:' * 3 + '无消息')
                example_clear = list_clear()
                clear = example_clear.list_clears()  # 清除集合中的所有元素
                time.sleep(3)

                pass
            else:
                print('>>>:' * 3 + '新消息')
                # 调用API实现机器人回复
                # 获取新消息
                mes_content = example_post_mess_html.separate_mes_html()
                BF2_API_post.Multi_group_shouting().Get_group_list()
                BF2_API_post.Multi_group_shouting().Shouting_realization(mes_content)



                time.sleep(2)

                example_clear = list_clear()
                clear = example_clear.list_clears()  # 清除集合中的所有元素

                break


我们只说改动的部分

这是main源码的原来部分。

        if self_qq_again == self_qq:  # 对比QQ号验证是否有新消息
            print('>>>:' * 3 + '无消息')
            example_clear = BF2_API_get.list_clear()
            clear = example_clear.list_clears()  # 清除集合中的所有元素
            time.sleep(3)

            pass
        else:
            print('>>>:' * 3 + '新消息')
            # 调用API实现机器人回复

            #获取新消息
            mes_content = example_post_mess_html.separate_mes_html()
            #获取回答消息
            msg = example_answer_logic.get_API_answer(mes_content=mes_content)

            #进行提交回复消息
            post_msg = example_post_mes.post_mes_API(msg=msg, group_id=group_id)

            time.sleep(2)

            example_clear = BF2_API_get.list_clear()
            clear = example_clear.list_clears()  # 清除集合中的所有元素
            if msg == "接收消息中......":
                BF2_API_get.Pending_implementation().shouting()
                print('已退出.............')

这是中转站改动的部分。

            if self_qq_again == self_qq:  # 对比QQ号验证是否有新消息
                print('>>>:' * 3 + '无消息')
                example_clear = list_clear()
                clear = example_clear.list_clears()  # 清除集合中的所有元素
                time.sleep(3)

                pass
            else:
                print('>>>:' * 3 + '新消息')
                # 调用API实现机器人回复
                # 获取新消息
                mes_content = example_post_mess_html.separate_mes_html()

                BF2_API_post.Multi_group_shouting().Get_group_list()
                BF2_API_post.Multi_group_shouting().Shouting_realization(mes_content)


                time.sleep(2)

                example_clear = list_clear()
                clear = example_clear.list_clears()  # 清除集合中的所有元素

                break


我们把main源码中的获取回答消息与发送消息进行了去除,然后把我们写好的喊话的函数放进去,因为我们的获取消息的函数还在,所以就会等待新的消息,这个新的消息会被放入我们写好的喊话功能中去,这样就会实现我们想要的喊话功能,如果没有新消息就会一直在这里监听,不过,任何新消息都会被当成喊话的内容,到最后,喊话完后,就会跳出这个中转站函数的循环,进入到我们写好的主程序循环中去(累死了,想睡觉)。

制作不易,希望大家喜欢。下面的时间我会进行优化,暂时不会更新,毕竟代码写的太杂乱了,得让代码好康,又好用。如有不懂的地方,我会解答的,当然也希望听听大佬的意见。

 

 

 

 

 

 

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Python QQ机器人是一种使用Python开发的机器人,用于在QQ平台上提供自动化服务和功能。使用Python QQ机器人可以实现诸如消息发送与接收、群组管理、定时任务、数据存储等功能。要使用Python QQ机器人,你需要进行以下几个步骤: 1. 阅读官方文档:为了更好地了解Python QQ机器人使用和API,建议你先阅读官方文档。文档中提供了关于安装、配置、功能、API等方面的详细说明。 2. 创建虚拟环境:在Windows系统中,你可以使用命令"pythonx -m venv robotvenv"来创建虚拟环境,其中x代表你所安装的Python版本。在Linux系统中,你可以使用对应的命令来创建虚拟环境。 3. 安装必要库:在虚拟环境中,你需要使用pip命令安装一些必要的库,例如nb-cli、pydantic、loguru、pygtrie、httpx、python-dotenv、uvicorn、fastapi、requests、selenium、aiocqhttp、ffmpeg、aiohttp、nonebot2、nonebot-plugin-apscheduler、nonebot-adapter-cqhttp等。 4. 编写代码:根据你的需求和功能,在虚拟环境中使用Python编写代码。你可以使用nonebot框架来简化开发过程,nonebot提供了许多便利的工具和插件来开发Python QQ机器人。 5. 运行机器人:完成代码编写后,你可以在虚拟环境中运行Python QQ机器人。通过启动命令行界面或使用IDE,你可以运行机器人并将其连接到QQ平台。 请注意,以上是一个简单的起步教程,为了更深入地了解Python QQ机器人的开发和使用,建议你继续阅读官方文档并参考更多的示例代码和教程。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值