欢迎访问匆匆知识网!

匆匆知识网

当前位置:首页 > 句子大全 > 经典句子

经典句子

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

2024-01-05 13:03:09经典句子
首先,main中的实例化类我们不在多讲,进行消息的检查,需要刷新页面也就是需要如下,通过下面进行刷新页面,以及拿取检查所需要的QQ号如果相等,就是没有消息,清除掉列表中的内容,重新循环。下面的时间我会进行优化,暂时不会更新,毕竟代码写的太杂乱了,得让代码好康,又好用。

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

里面的代码包含了整个get源代码前面那一块没有被放进类上面的代码,以及回复逻辑类中的代码,为何我把这两块代码分开了呢,由于我觉得假如回复消息的时侯去运行上面的代码,浪费时间,所以就把她们丢到了外边,她们的值原本就是不变的所以先去运行她们后,应当可以节约时间。

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

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

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

话说,为何我要用这个行呢?由于你的词库的遍历是有限的,要是无限的遍历,会出现你最喜欢的,黑色的,error,error,error,所以晓得担心了吧(似乎也就我会怕,我好菜)。

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

额,至于我为何要用str,=str([num]),你可以看到Excel中我弄了一个“666”,这玩意儿获取下来,是“int类型”,而“”又是“str类型”,所以就必须转化一下(话说,这玩意儿整了我很久才找出他来,这个bug真累死我了),下边也简单的让你们看一下她们的索引。

所以,由于所对应的回答在同一列,所以她们旁边的索引也都是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伤感自动回复_伤感自动回复短句

这个类,就单纯的实现QQ消息的发送也并没有哪些好讲的(大家应当就会,相信大家),倘若不懂这个url的话,可以去瞧瞧我上面写的以及这个。

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)

我们先在额头上方上两个列表,一个存获取的群号,另一个存名子。再我们定义类,一个获取信息自动回复伤感,另一个发送消息。对于我们的获取消息的类,也是不麻烦,通过通配符取值的方式,拿取群号和群名,之后添加到列表中。发送消息的类,用切块的方式拿取列表中的群号与群名,其实url中只须要群号,群名我们在输出中使用(就那么点破代码,还整了我很久的时间,我人麻了)。

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

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

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

下边便是检测消息是否为新消息,通过对比自身的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源码中的获取回答消息与发送消息进行了清除,之后把我们写好的喊话的函数放进去,由于我们的获取消息的函数还在,所以才会等待新的消息,这个新的消息会被装入我们写好的喊话功能中去,这样才会实现我们想要的喊话功能,假如没有新消息都会仍然在这儿窃听,不过,任何新消息就会被当作喊话的内容,到最后,喊话完后,才会跳出这个中转站函数的循环,步入到我们写好的主程序循环中去(吓死了,想睡着)。

制做不易,希望你们喜欢。下边的时间我会进行优化,暂时不会更新,虽然代码写的太零乱了,得让代码好康,又好用。如有不懂的地方自动回复伤感,我会解答的,其实也希望听听大鳄的意见。