本QQ机器人实现的功能

1.调用青云客的API进行自动聊天

2.输入关键词自动添加为好友

3.自动发送消息

技术栈

非特殊情况保持一致即可!

1.SpringBoot-3.0.3

2.JDK-17

3.Mirai-3.0.0.0-beta.6

4.Simboot-3.0.0-RC.3

GitHub讨论,有问题可以去这里提: https://github.com/orgs/simple-robot/discussions

Robot 官方文档: https://simbot.forte.love

官方交流QQ群:185375305

源码

https://gitee.com/mumangguo/qqrobot

实现步骤:

1. 新建一个springBoot项目,不选任何依赖直接创建即可

2. 引入相关依赖

        <!-- simbot Spring Boot Starter --><dependency><groupId>love.forte.simbot.boot</groupId><artifactId>simboot-core-spring-boot-starter</artifactId><version>3.0.0-RC.3</version></dependency><dependency><groupId>love.forte.simbot.component</groupId><artifactId>simbot-component-mirai-core</artifactId><version>3.0.0.0-beta.6</version></dependency><!-- httpclient用来请求自动回复API --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency>

3.编写application.properties配置文件

# 是否在bot注册完成后自动启动他们。
# 默认为true
simbot.auto-start-bots=true# 自定义配置bot资源文件的扫描路径。
# 默认为 classpath:simbot-bots/*.bot*
simbot.bot-configuration-resources[0]=classpath:simbot-bots/*.bot*#配置监听的QQ号,多个QQ用逗号分割
MonitorQQ=1805395628

4.根据application.properties配置文件配置得到,需要在resources目录下新建一个simbot-bots目录,在里面新建一个xxx.bot.json的文件,根据自己的实际情况对配置文件进行修改即可!

{"component": "simbot.mirai","code": 你的QQ账号,"passwordInfo": {"type": "text","text": "你的密码"},"config": {"protocol": "MACOS"}
}

5.定时发送信息类,通过配置达到自动发信息的目的,在代码中更改你自己的QQ机器人号,此功能可写可不写!

import love.forte.simbot.Identifies;
import love.forte.simbot.application.BotManagers;
import love.forte.simbot.bot.BotManager;
import love.forte.simbot.component.mirai.MiraiFriend;
import love.forte.simbot.component.mirai.bot.MiraiBot;
import love.forte.simbot.component.mirai.bot.MiraiBotManager;
import love.forte.simbot.component.mirai.message.MiraiSendOnlyImage;
import love.forte.simbot.resources.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.net.URL;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Set;@Component
public class AutoMessage {private static final Logger log = LoggerFactory.getLogger(AutoMessage.class);@Autowiredprivate BotManagers botManagers;@Value("${MonitorQQ}")private Set<String> qqSet;/*** 定义语录*/static List<String> content;/*** 定义图片*/static List<String> images;static {content = new ArrayList<>();images = new ArrayList<>();log.info("开始加载定义语录~~~");// 定义语录content.add("遇见你之前,我没想过结婚,遇见你之后,结婚我没想过别人。");content.add("你走向我,我觉得一日不见如隔三秋,你朝我笑,我又觉得三秋未见不过一日。");content.add("如果可以和你在一起,我宁愿让天空所有的星光全部损落,因为你的眼睛,是我生命里最亮的光芒。");content.add("我一直喜欢温暖的东西,而世界上最温暖的,无非阳光和你。");content.add("我不要短暂的温存,只要你一世的陪伴。");content.add("我没有特别喜欢的零食,没有特别喜欢的电影,没有特别喜欢听的歌,但我就是特别喜欢你。");content.add("一年四季想陪你度过,世间琐事都想与你做,此生也只想同你尝尽烟火。");content.add("我还是很喜欢你,像七月的风和八月的雨,毫无交集。");content.add("你在我身边也好,在天边也罢,想到世界的角落有一个你,觉得整个世界也变得温柔安定了。");content.add("我的人生理念是活十成,一成不变的是爱你,剩下九成是加倍爱你。");log.info("开始加载表情图片~~~");// 表情图片images.add("https://gitee.com/xxg-git/file-services/raw/master/QQ-robot/112ab4dd77ba5919bd830a75cf8973c.png");images.add("https://gitee.com/xxg-git/file-services/raw/master/QQ-robot/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20200623142757.jpg");images.add("https://gitee.com/xxg-git/file-services/raw/master/QQ-robot/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201002220953.jpg");images.add("https://gitee.com/xxg-git/file-services/raw/master/QQ-robot/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201002221329.jpg");images.add("https://gitee.com/xxg-git/file-services/raw/master/QQ-robot/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201002221441.jpg");images.add("https://gitee.com/xxg-git/file-services/raw/master/QQ-robot/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201002221545.jpg");images.add("https://gitee.com/xxg-git/file-services/raw/master/QQ-robot/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201004212459.jpg");images.add("https://gitee.com/xxg-git/file-services/raw/master/QQ-robot/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201004212532.jpg");}/*** 每一小时发送一次: 0 0 0/1 * * ?* 每五分钟发送一次: 0 0/5 * * * ?* 每天晚上8点: 0 0 20 * * ?*/@Scheduled(cron = "0 0/1 * * * ?")public void handler() {Calendar calendar = Calendar.getInstance();// 获取当前小时int hour = calendar.get(Calendar.HOUR_OF_DAY);// 只在早上8点到晚上22点发送消息if (hour < 8 || hour > 22) {return;}//发送QQ私信qqSet.forEach(qq -> {try {final String msg = content.get(new SecureRandom().nextInt(content.size()));//图片URL:https://gitee.com/xxg-git/file-services/raw/master/QQ-robot/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20201004212532.jpgfinal String img = images.get(new SecureRandom().nextInt(images.size()));// 获取所有的botfor (BotManager<?> manager : botManagers) {if (manager instanceof MiraiBotManager miraiBotManager) {MiraiBot bot = miraiBotManager.get(Identifies.ID("你的机器人QQ号"));// 拿到bot,怎么操作看你心情,比如往某个群发消息assert bot != null;MiraiFriend friend = bot.getFriend(Identifies.ID(qq));assert friend != null;friend.sendAsync(msg);// 构建图片MiraiSendOnlyImage offlineImage = MiraiSendOnlyImage.of(Resource.of(new URL(img)));// 上传图片到friend,然后向其发送// 得到发送回执的 FutureofflineImage.uploadAsync(friend).thenCompose(friend::sendAsync);log.info("正在发送定义语录,当前qq={}, 语录={}, img={}", qq, msg, img);break;}}} catch (Exception e) {log.error("发送定义语录异常, qq={}", qq, e);}});}
}

6.消息监听类

import love.forte.simboot.annotation.Listener;
import love.forte.simbot.ID;
import love.forte.simbot.event.FriendAddRequestEvent;
import love.forte.simbot.event.FriendMessageEvent;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;import java.nio.charset.StandardCharsets;/*** 监听类* Author:木芒果*/
@Component
public class MessageListener {private static final Logger log = LoggerFactory.getLogger(MessageListener.class);/*** 监听好友添加请求*/@Listenerpublic void onFriendAddRequest(FriendAddRequestEvent friendAddRequestEvent) {String message = friendAddRequestEvent.getMessage();ID id = friendAddRequestEvent.getFriend().getId();log.info(id + ",添加我为好友");//触发关键词即自动同意,否则拒绝if (message.equals("木芒果")) {log.info("同意添加" + id + "为好友");friendAddRequestEvent.acceptAsync();} else {log.info("拒绝添加" + id + "为好友");friendAddRequestEvent.rejectAsync();}}/*** 监听消息*/@Listenerpublic synchronized void onMessage(FriendMessageEvent friendMessage) {String msg = friendMessage.getMessageContent().getPlainText();//把空格自动转换为逗号msg = msg.trim().replaceAll(" ", ",");log.info(friendMessage.getFriend().getId() + "提问:" + msg);//AI自动回复String reply = AiOne(msg);if (reply == null) {reply = "宝,回复失败!重新试试把!";}//异步回复消息friendMessage.replyAsync(reply);}public static String AiOne(String sendMsg) {try {HttpGet httpGet = new HttpGet("http://api.qingyunke.com/api.php?key=free&appid=0&msg=" + sendMsg);String user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.42";httpGet.addHeader("user-agent", user_agent);CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = httpClient.execute(httpGet);String body = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);body = body.substring(body.indexOf("content") + 10, body.length() - 2);log.info("AiOne={}", body);return body;} catch (Exception e) {log.error(e.toString());return null;}}
}

7.代码部分完成,由于腾讯管理的太严需要用到一个安卓的app进行qq登录验证

下载链接:https://github.com/kagg886/Seiko/releases,下的慢的可以挂国外加速器,源码中也有

下载好以后,打开是这样的,我用的是V0.1.2版本,选择MACOS协议或者手表协议并选择使用扫码登录即可。选择好协议记得把demo.bot.json文件的协议与登录协议保持一致

{"component": "simbot.mirai","code": 你的QQ账号,"passwordInfo": {"type": "text","text": "你的密码"},"config": {"protocol": "ANDROID_WATCH"}
}

登录好以后将登录的数据打包发送到电脑上(长按头像或者名字),注意:如果是通过qq发送的,别用当前登录的账号发送,会被挤下线,建议用小号做机器人的话,那么就用大号进行数据传输

发送到电脑端以后是一个压缩包,我们只要cache目录和device.json和loginTemplate.yml文件,将这三个文件复制粘贴到项目的根目录下,用于认证

如登录还是遭遇235或45错误,可以试着多换几种协议试试,如果还是不行请更换一个新的QQ账号!可以注册一个新的QQ号!

8.编写启动类,直接启动即可!

@EnableSimbot //开启Simbot
@EnableScheduling //开启定时任务
@SpringBootApplication
public class qqRobotApplication {private static final Logger log = LoggerFactory.getLogger(qqRobotApplication.class);public static void main(String[] args) {SpringApplication.run(qqRobotApplication.class, args);log.info("木芒果机器人启动成功!");}
}

如果还没学会可以观看官方教程:https://www.bilibili.com/video/BV1vA411o7A3,有问题留言评论,我会第一时间解答!

Mirai3+SpringBoot3实现QQ机器人相关推荐

  1. 卷毛机器人抢大龙视频_腾讯这一措施,又砸碎了一些小企业的饭碗,QQ机器人成为历史...

    腾讯最近又开始搞"骚动作",第三方QQ机器人已经停止运营,包括晨风.酷Q.契约.mpq.乾坤.oneQQ.lightQQ.miral, 没想到,我最爱的酷Q也停止了,本来还打算再做 ...

  2. 华景机器人怎么控制_【华景QQ机器人怎么用】华景QQ机器人好不好_使用技巧-ZOL软件百科...

    发布日期:2016年02月21日 Release 2 && Release 3新增功能和优化及修复 修复严重崩溃问题. 全面支持emoji表情. 修复某些用户不能登录. 轻量级重包处理 ...

  3. 妖帝q群机器人_有关酷Q 晨风机器人,契约 qqlite qqlight ,mypc等QQ机器人关停一事的一点想法...

    估计有不少朋友都使用过QQ机器人,因为很多网友每天都要管理很多个QQ交流群,如果一个人管理,估计都得累死,所以一般都会使用QQ机器人来帮助自己管理. 只是腾讯自身的QQ机器人实在不给力,功能太鸡肋,而 ...

  4. Ubuntu16.04安装QQ机器人

    Ubuntu安装QQ机器人 看了看现在QQ机器人似乎只有酷Q机器人有Docker可以在linux上运行了 那就k开始装酷Q机器人,资源占用也不是很大,大概占用180M内存吧 安装酷Q HTTP 首先安 ...

  5. 基于WebQQ3.0协议写一个QQ机器人

    最近公司需要做个qq机器人获取qq好友列表,并且能够自动向选定的qq好友定时发送消息.没有头绪,硬着头皮上 甘甜的心情瞬间变得苦涩了 哇 多捞吆 1.WEBQQ3.0登陆协议 进入WEBQQ, htt ...

  6. 2019pythonqq机器人_基于Python来开发一个QQ机器人, 原来这么简单!

    本篇教大家如何用Python来实现QQ机器人,如有不足欢迎在评论方指出!很多小伙伴问我有没有一个可以让大家学习交流的地方,大家可以关注WX公众号:python闪充,关注之后直接获取 简单介绍 安装方法 ...

  7. 【Linux】使用私人服务器搭建qq机器人

    继上次开发完私人服务器后,今天用服务器搭建了一个qq机器人. 第一步:下载工具 分别在Ubuntu中下载cqhttp.zerobot以及golang. 第二步:修改cqhttp和zerobot的配置文 ...

  8. Python专辑-QQ机器人2:智能聊天、定时执行任务实现

    文章目录 前言 具体实现 1.定时发送信息 2.让机器人陪女朋友聊天 3.调用一些有趣的接口 下一篇文章实现更多功能 前言 上一篇文章地址:点击跳转 上一篇文章介绍了怎么配置机器人框架,并且实现了一些 ...

  9. 2023最新可用QQ机器人框架整理

    排名无先后顺序,不定时更新,欢迎留言补充 1.qy机器人 官网:www.qvbot.com 稳定.高效.免费的QQ机器人框架.支持多种语言二次开发可现实群管.聊天.便民服务等多种功能.功能更强大,无限 ...

最新文章

  1. [网络安全自学篇] 四十五.病毒详解及批处理病毒原理分析(自启动、修改密码、定时关机、蓝屏、进程关闭)
  2. 万级K8s集群背后etcd稳定性及性能优化实践
  3. SlimYOLOv3:更窄、更快、更好的无人机目标检测算法
  4. JavaScript日期有效性检查
  5. Charles for Mac(信息抓包工具)
  6. 7 种 JVM 垃圾收集器,Java语言实现核心,看完我跪了
  7. Spring Boot 集成 RabbitMQ 升级
  8. 激光打标机不能刻字的处理
  9. html5 语音直播,一种基于HTML5浏览器的音视频直播方法与流程
  10. 真北方向、坐标北向以及磁北向
  11. oracle db studay
  12. Codeforces Gym 100015B Ball Painting 找规律
  13. Flink Window Function
  14. 1564_AURIX_TC275_电压监控寄存器整理
  15. Vue路由守卫(导航守卫)及使用场景
  16. 社会实践活动报告—06暑假饭店打工
  17. java.lang.OutOfMemoryError: GC overhead limit exceeded解决办法
  18. 适用于mac的科研论文高等数学公式软件
  19. java判断一个月连续打卡时间_java并发编程实战《五》死锁 挑战打卡60天
  20. OMI/Aura臭氧数据下载及绘图

热门文章

  1. UIFontDownLoad ----动态下载系统提供的字体
  2. 【单选题】为了侵入用屏蔽予网体系结构保护的内部网络,侵袭者必须要通过
  3. Microsoft Visual Studio 2012正式版官方下载
  4. unity接微信登录,eclipse打jar包,快速高效
  5. 干货 | 为了让携程上万员工上好网,他们做了这些
  6. 十代主板改win7_大神们, 大哥们 求告知WIN10原系统 , 在弄个WIN...-十代win7,十代处理器可以装win7吗...
  7. WebService中的WSDL详解
  8. 盒子模型的边框及样式
  9. 浅谈手机杀毒软件及手机病毒!
  10. 解决mmdetection显示mask的问题