QQ群消息监听并将消息存储到SQLite数据库中
目录
一、前言
公司有个需求,需要抓取QQ群里的消息内容,把消息内容存储到数据库当中。做这个功能之前,网上到处找了很多相关的资料及软件。有看到很多群消息监控的软件,但是都不太满足博主的要求,整来整去,最后博主还是决定自己开发一个,毕竟自己开发的源码啥的都在自己手里,想做成什么样子都可以,完全随自己的心意。这篇博客就记录一下如何实现,仅供大家学习交流。
大致的讲一下整个过程:博主是利用了酷Q机器人的SDK,自己开发了一个小小的插件实现的,现在酷Q社区有的时候可以开放注册,有的时候又注册不了,博主为了这个社区账号可谓是煞费苦心好不容易才注册到一个账号的。不过貌似注册到了账号,也无济于事,下载下来的SDK报错,没法解压,根本没法用,后来又各种找SDK,终于在CSDN上面找到一个可用的SDK包,花了50个C币,没让我失望,下载之后可以使用。整个插件是易语言写的,没办法又花了两天的时间学习易语言的语法,大致掌握之后开始了造轮子之旅。
目前已经实现的功能:1、可抓取的指定QQ群的消息内容并且存储到SQLite中。2、可动态配置数据库地址以及表名称。3、可动态配置需要将消息推送至的服务器地址。
注:需要用到的东西,都可以直接通过博主分享的网盘进行下载,不需要再花费大家的c币了。
二、效果图
老规矩,先贴上已经完成的效果图,毕竟看到效果图才会知道是不是自己想要的东西嘛。
1、插件界面

2、SQLite数据库

3、QQ群消息

三、准备工作
1、CQA软件
链接:https://pan.baidu.com/s/1_yFA9aVZbLX9pySgjXYz8Q
提取码:jacz
2、CQA-SDK易语言版本
链接:https://pan.baidu.com/s/1b0JlIolT9pTi-vS5zd-jmQ
提取码:ukzx
3、易语言破解版
链接:https://pan.baidu.com/s/1_WUeQQSLvP2HdsUBlU68MA
提取码:4p7y
4、使用到的相关模块
链接:https://pan.baidu.com/s/1e6pyYHhAdcpJTA95r0RRhw
提取码:ahdk
四、开始撸代码
把相关的东西下载下来之后,就可以开始撸代码了,将SDK中的demo目录复制到CQA软件目录下面

名字改成:com.carter.group

编辑 app.json 文件,内容使用以下内容替换
// 酷Q 的Json文件支持以 // 开头的注释。
// 开发模式下,应用的 app.dll, app.json 的文件须放在 dev/[appid]/ 目录下,应用 AppInfo 函数返回的内容须改为 appid
// 如 appid=com.example.demo, 则dll及json文件需分别放在 dev/com.example.demo/app.dll、dev/com.example.demo/app.json
{
"ret":1, // 返回码,固定为1
"apiver":9, // Api版本,本SDK为9
"name":"群消息监听", // 应用名称
"version":"1.0.0", // 应用版本
"version_id":1, // 应用顺序版本(每次发布时至少+1)
"author":"Carter", // 应用作者
"description":"监听指定的群消息,保存到指定的SQLite数据库中",
"event":[ // 事件列表,同一事件类型可重复定义(发布前请删除无用事件)
{
"id":1, // 事件ID
"type":21, // 事件类型
"name":"私聊消息处理", // 事件名称
"function":"_eventPrivateMsg", // 事件对应函数
"priority":30000 // 事件优先级(参见 cq.im/deveventpriority)
},
{
"id":2,
"type":2,
"name":"群消息处理",
"function":"_eventGroupMsg",
"priority":30000
},
{
"id":3,
"type":4,
"name":"讨论组消息处理",
"function":"_eventDiscussMsg",
"priority":30000
},
{
"id":4,
"type":11,
"name":"群文件上传事件处理",
"function":"_eventGroupUpload",
"priority":30000
},
{
"id":5,
"type":101,
"name":"群管理变动事件处理",
"function":"_eventSystem_GroupAdmin",
"priority":30000
},
{
"id":6,
"type":102,
"name":"群成员减少事件处理",
"function":"_eventSystem_GroupMemberDecrease",
"priority":30000
},
{
"id":7,
"type":103,
"name":"群成员增加事件处理",
"function":"_eventSystem_GroupMemberIncrease",
"priority":30000
},
{
"id":10,
"type":201,
"name":"好友已添加事件处理",
"function":"_eventFriend_Add",
"priority":30000
},
{
"id":8,
"type":301,
"name":"好友添加请求处理",
"function":"_eventRequest_AddFriend",
"priority":30000
},
{
"id":9,
"type":302,
"name":"群添加请求处理",
"function":"_eventRequest_AddGroup",
"priority":30000
},
{
"id":1001,
"type":1001,
"name":"酷Q启动事件",
"priority":30000,
"function":"_eventStartup"
},
{
"id":1002,
"type":1002,
"name":"酷Q关闭事件",
"priority":30000,
"function":"_eventExit"
},
{
"id":1003,
"type":1003,
"name":"应用已被启用",
"priority":30000,
"function":"_eventEnable"
},
{
"id":1004,
"type":1004,
"name":"应用将被停用",
"priority":30000,
"function":"_eventDisable"
}
],
"menu":[ // 设置菜单(发布前请删除无用菜单,如果无需设置菜单请全部删除)
{
"name":"监听设置", //菜单名称
"function":"_menuA" //菜单对应函数
}
],
"status":[ // 悬浮窗状态(见 com.example.status 样例)
],
"auth":[ // 应用权限(发布前请删除无用权限)
101, //发送群消息 sendGroupMsg
103, //发送讨论组消息 sendDiscussMsg
106, //发送私聊消息 sendPrivateMsg
130, //取群成员信息 getGroupMemberInfoV2 / getGroupMemberInfo
131, //取陌生人信息 getStrangerInfo
160, //取群成员列表 getGroupMemberList
161, //取群列表 getGroupList
180 //撤回消息 deleteMsg
]
}
将相关模块放到以下目录中

进入到 com.carter.group 目录中使用易语言破解版打开 app.e 文件,点击左边的程序,将使用到的模块引入,默认会引入SDK,这边只需要引入精易模块即可。

点击 工具 -> 支持库配置 把SQLite3 勾选上

拖拽右边的组件,将窗口画出来

全局变量替换成以下内容

窗口程序集源码如下,直接放源码好像不太好放,下面就直接截图吧,伸手党可以直接下载博主分享的插件,只是学习的话,将就一下看看图片吧。源码比较长,所以截屏可能会比较多一点。










开始编写CQ应用代码






最后一个修改的地方

修改完了之后点击 编译 -》静态编译 即可得到一个 app.dll 的文件

运行CQA软件,找到应用管理就可以看到自己开发的插件了

如果要打包插件,选中自己的插件,然后点击开发即可

打包之后会生成以下插件,这个文件就可以发布出去给大家一起使用了

下面是博主已经打包后的插件,要直接用的可以下载使用
下载地址:https://download.csdn.net/download/Wjhsmart/12589454
将插件复制到CQA的app目录下面即可使用

如果想下载源码运行起来研究,可以点击下面的下载地址下载源码。
下载地址:https://download.csdn.net/download/Wjhsmart/12589519
五、结尾
写教程还真不是件容易的事情,需要考虑到各种情况,如果有漏掉的地方欢迎大家留言指正,博主会及时更正的。
QQ群消息监听并将消息存储到SQLite数据库中的更多相关文章
- linux配置oracle11G监听及本地网络服务 及 数据库建库
配置监听及本地网络服务 在oracle用户的图形界面oracle用户中,新开启一个终端,输入命令netca 会弹出如下界面. 数据库建库 在oracle用户的图形界面oracle用户中,新开启一个终端 ...
- 内容观察者 ContentObserver 监听短信、通话记录数据库 挂断来电
Activity public class MainActivity extends ListActivity { private TextView tv_info; private ...
- android适配器及监听点击和滚动在ListView中的使用
package com.example.demon08; import java.util.ArrayList;import java.util.HashMap;import java.util.Li ...
- Oracle ora-12514监听程序当前无法识别连接描述中请求的错误
昨天刚安装好oracle数据库,还可以登录,到今天,登录时就发出了这样的错误 到网上找了半天,上面都是说监听器服务的问题,但是试过后依旧不行.最后重启了一次,就解决了异常 原来是oracle中一个服务 ...
- kafka flumn sparkstreaming java实现监听文件夹内容保存到Phoenix中
ps:具体Kafka Flumn SparkStreaming的使用 参考前几篇博客 2.4.6.4.1 配置启动Kafka (1) 在slave机器上配置broker 1) 点击CDH上的kafk ...
- 【故障•监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe
[故障|监听]TNS-12518.TNS-00517和 Linux Error:32:Broken pipe 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱 ...
- C#全局键盘监听(Hook)
一.为什么需要全局键盘监听? 在某些情况下应用程序需要实现快捷键执行特定功能,例如大家熟知的QQ截图功能Ctrl+Alt+A快捷键,只要QQ程序在运行(无论是拥有焦点还是处于后台运行状态),都可以按下 ...
- 【DB宝49】Oracle如何设置DB、监听和EM开机启动
目录 一.Windows系统 二.Linux系统 方法1:配置/etc/rc.d/rc.local文件(推荐) 方法2:配置service服务 三.Oracle 18c版本 四.总结 一.Window ...
- Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
随机推荐
- 制作zipkin docker镜像
这里使用的zipkin知识基于内存的版本,没有接入外部存储 https://zipkin.io/ https://github.com/openzipkin/zipkin https://github ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- CSS3弹性布局内容对齐(justify-content)属性使用详解
内容对齐(justify-content)属性应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis)对齐. 该操作发生在弹性长度以及自动边距被确定后. 它用来在存在剩余空间时如何加以分配 ...
- ucore系统 eclipse-cdt实验环境准备
官网下载eclipse eclipse-cpp-luna-SR2-linux-gtk-x86_64.tar.gz省略安装jdk 等配置解压安装即可导入实验的项目 点击完成即可完成导入 开始配置qemu ...
- Nginx深入浅出
一级标题为思维导图的链接 :) 1. Nginx简介 1.1 nginx概述 说明(C10K) 程序架构(master/worker) nginx的特性 文件并发处理(异步.事件驱动)epoll / ...
- CentOS8.1安装Docker及Docker-compose
使用 Docker 仓库进行安装 在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库.之后,您可以从仓库安装和更新 Docker. 设置仓库 安装所 ...
- 基础拾遗---委托,匿名函数,lambda
前言: C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.委托(Delegate)特别用于实现事件和回调方法. ...
- 2020年最新78道JVM面试题总结(含答案解析和思维导图)
前言 关于JVM系列面试知识点总结了一个思维导图,分享给大家 1.java中会存在内存泄漏吗,请简单描述. 会.自己实现堆载的数据结构时有可能会出现内存泄露. 2.64 位 JVM 中,int 的长度 ...
- 并发05--JAVA并发容器、框架、原子操作类
一.ConcurrentHashMap的实现原理与使用 1.为什么要使用ConsurrentHashMap 两个原因,hashMap线程不安全(多线程并发put时,可能造成Entry链表变成环形数据结 ...
- 关于 urlencode 的使用和 json 模块的介绍
先附上一段 “百度翻译” 的爬虫代码 # python爬虫实现百度翻译 # urllib和request POST参数提交 from urllib import request,parse impor ...