基础:requests的基本使用:QQ机器人基础 传送门
pythonQQ机器人系列:使用requests实现QQ机器人聊天(0-2) 传送门
pythonQQ机器人系列:使用requests实现QQ机器人聊天(1-0)
pythonQQ机器人系列:使用requests实现QQ机器人聊天(2-0)
目录
系列文章目录
前言(一)
前言(二)
一.源代码讲解
1.main_api_program.py源码讲解
2.Main_system.py源码讲解
hello,大家好,这里是菜的离谱的萌新博主。
这几天不也是快春节了嘛。
咱是闲下来有空了,把这个鸽了N年的博客咱抽空写完了。大家应该也是放假或者马上要放假了
在此提前祝大家新年快乐。
过一个好年。
咱写的不好,非喜勿喷。
#目前又找到了一种新的方法来获取消息,获取的速度比socket快,也不再需要上报,打算不再使用socket,所以说,下一次又是一次大更,希望大家支持一下博主
socket简单教程:
所有的文件都在这(包括config.yml)密码:博主好菜: https://www.123pan.com/s/UovlVv-5P83h
github地址(不包括config.yml):
go-cqhttp下载:
这里的话先把主体讲完(不包括多群喊话),剩下的api就留到下一次再讲,顺便再加一点别的api。
此文章继承前面的文章,这次更新了socket,可以用socket接收群私聊消息以及多群喊话,实现群私聊消息的回复功能,以及点歌和新闻。
最后谢谢大家的支持。
go-cqhttp的config.yml文件改动了部分内容,如下所示,改动部分在这个文件的靠下的位置(或者直接用我的文件进行替换),将前面的“#”号删去,并在url中加上,
http://127.0.0.1:5720/
下面是代码的各个文件
该怎么说呢,咱这个QQ机器人,就一个普通的单线程程序,所以代码一多运行的就慢了。
正常的思路
一.等待消息出现
二.接收消息,并做处理
三.回复消息
四.循环
这是一个最简单的思路,接下来咱就跟着这个最简单的思路,往下恰代码,我知道你们肯定喜欢敲代码
这次咱们就不把源码放上了,源码都在上面大家可以下下来直接看,咱们直接进入主题。
感觉这些挺通俗易懂的,当然我相信你们是会的,况且我上面加了详细的注释..........................
好,直接及进入下一步
这里与之前不同,之前咱们的代码是靠的go-cqhttp的api指令进行获取的群消息,这次咱们使用的socket来获取消息,用socket的好处就是,可以接收到各种上报事件,消息就是上报事件之一,这样咱们也就可以进行回复私聊消息等各种的操作。
接下来跟着博主来看看运行的代码,当然就是单纯这里的运行代码
下面是运行的代码结果
这里大家也都看见了,第一部分是
所以我们就想要拿到这第一部分的下面的内容,然后我就想了一个办法,用切片的方法把这里获取下来。
然后我就用while循环一直循环到有"{"才结束,然后在这里记录切片到这里的计数,然后把这里以及后面的全部拿下来,也就是我们的演示部分的那块代码。
还有一个非常重要的事情,就是这里,你获取的非常想字典,但是他不是字典,是字符串,然后我们就用json库,来把字符串,变成字典,也就是 loads()的用法。
还有还有非常非常重要的一个点 ,那就是没消息获取的上报与有新消息时的上报是不一样的,下面是他们的例子,大家可以观察一下
所以在取消息的时候一定不要弄的太绝对 ,额,至于怎么绝对,就自己想吧,我反正是出错了。
好了,按照我们的思路,我们要拿到发送的消息,把没用的剔除去,毕竟是字典,我们用键值取值的方法就可以拿到消息的各个参数,并添加到我们设置的字典中,也就是咱们下面的代码。
说实话,我也不知道为什么我当初要单独把判断消息的群聊还是私聊的取值要单独弄一个函数,算了不管了,直接摆烂,我相信你们这些大佬一定会解决好这些问题的,不想改的就勉强看着我的吧。
第一个分离消息的函数,我们就是先判断是否获取到的上报消息是否为消息,也就是第一个if,第二个if,也就是获取消息的群聊还是私聊的消息,获取这里的消息是为了后面回复时用的不同的api的使用
第二个分离消息的函数,对了对了,还有一个非常重要的事情,群聊消息的上报与私聊消息的上报是不一样的,这也就是为什么要单独的多一个if,下面有示例。好,我们接下来继续讲, 第二个分离消息的函数,和上面一样,先判断是否获取到的上报消息是否为消息,也就是第一个if,第二个if,也就是获取消息的群聊还是私聊的消息,获取这里的消息是为了后面回复时用的不同的api的使用,好家伙,感觉这两个函数的作用一样,好吧,懒得改了,靠你们了,(斜笑脸)。
还有一个非常重要的一个点,你获取的消息可能不是str(字符串),额,至于是不是这里的毛病我也忘了,没办法,N年前的代码了 ,我记得我是遇到了一个str与int的毛病,所以就把获取的消息都变成字符串,然后添加到字典中
以下是示例
好了,我们继续向下讲
第一个函数的使用就不再细讲了,懂点基础就会,将是想把获取的消息输出。
第二个函数的使用 ,懂go-cqhttp的可以跳过了,应该明白,不懂的,也可以跳过,闹着玩,大家可以去go-cqhttp的官网看看,我直接给大家链接:
好了,就这样吧,requests的使用不会的可以看一下前面的文章,我太懒了。
接下来,继续讲
一不小心暴露,自己的新增的api了 ,这里的代码切记不可带人使用,要直接用我们前面的地址中没改前的代码,关于为什么前文没写这些api,因为我也是最近才找到了一个好的api网站,没办法。
说明,这里的代码是为了弹出我们获取的消息的回答,所以需要弹出msg,一开始,我们用的切片的方法遍历我们的word.xlsx文件中的字,这种匹配的话,只能是精确匹配,必须一样才能给与后面的回复,大家可以手动试一下前面的pandas的操作,这里就不多展示了,额......,要不展示一下吧,下面是示例
这是这个亚子,所以懂了吗?
因为我们在获取消息的时候,就把获取到的消息添加到了字典,我们通过比对,一个一个回复就行了,最后没有消息可用才使用青客云的智能机器人进行聊天,我们可以这么说,我们分三级回复消息,第一级是我们的word.xlsx里面我们设置的回答,第二级是我们的api,最后是机器人聊天,第一级等级最高,对,就是这样,所以懂了吗?
那我们就继续向下讲了。
这应该就不用讲了吧,相当于是把字典清空,当初试了一下clear,结果,清空的连个毛都不剩了,哭死。。。。。。
好了,哭完我们继续,我想知道能看到这里的有几个人,可以评论一下吗?码字也是很辛苦的
这里面我们就只需要一个逻辑就行了,一开始,我们先获取消息,一直监听,直到新的消息出现,也就是
接下来就是将消息分离,用到的
再把我们获取到的消息输出
因为我们已经获取到了发消息的内容 ,所以我们就获取消息的回答
当然我们中间插了一个多群喊话的api,这个到时候再改一下,我感觉多群喊话的api在这里不妥当,我相信你们也这么觉得
剩下的咱们也就不讲了,就单纯的把回复的消息输出,最后清除字典,我们加上try也是为了避免错误,你可能听说过xss攻击 ,我们在这里也不能避免类似的这种攻击,一句话说的好,永远不要相信用户的输入,当然咱们这里单纯就是想避免错误,我是过,加"",或者加''或者加#,都有可能引发错误
文章写的肯定是不好,有错误希望大佬斧正
有不明白的可以留言,我会关注这些评论的,有不懂的可以看看go-cqhttp的官网,或者我的前面的文章,或者别的教程,总之,谢谢支持
也让我们,共同进步
同时,希望大家有一个美好的新年
在这里提前祝贺大家新年快乐
大家有兴趣的可以加群一起学习与进步,QQ群:494461275