0


用JAVA做个QQ机器人,帮我提醒女神按时喝水和陪她聊天~(带源码)

1、前言

正常人每天平均耗水量为2000-2500毫升,体内物质氧化可生水300毫升,故每日应补充水分2200毫升,包括饮食中的含水量。夏天每日补充水分在3000毫升左右,才能满足人体需要。
如果有个机器人能按时提醒我们喝水,那该多好啊~~

2、创建一个springboot项目

(这个步骤是为小白提供,大佬们直接跳到第三步)

2.1. 新建项目
在这里插入图片描述
2.2. 选择springboot项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.3. 创建完成的项目结构如下
在这里插入图片描述

3、引入simple-robot机器人依赖

3.1. 在pom.xml文件引入simple-robot依赖

<!--java机器人框架--><dependency><groupId>love.forte.simple-robot</groupId><artifactId>component-mirai-spring-boot-starter</artifactId><version>2.0.3</version></dependency>

在这里插入图片描述

3.2. 配置application.yml文件

simbot:core:# 机器人的QQ账号与密码(帐号:密码)bots: 6013505:yinfeng
  component:mirai:# mirai心跳周期. 过长会导致被服务器断开连接. 单位毫秒。heartbeat-period-millis:30000# 每次心跳时等待结果的时间.一旦心跳超时, 整个网络服务将会重启 (将消耗约 1s). 除正在进行的任务 (如图片上传) 会被中断外, 事件和插件均不受影响.heartbeat-timeout-millis:5000# 心跳失败后的第一次重连前的等待时间.first-reconnect-delay-millis:5000# 重连失败后, 继续尝试的每次等待时间reconnect-period-millis:5000# 最多尝试多少次重连reconnection-retry-times:2147483647# 使用协议类型。注,此值为枚举类 net.mamoe.mirai.utils.BotConfiguration.MiraiProtocol 的元素值,# 可选值为:ANDROID_PHONE、ANDROID_PAD、ANDROID_WATCHprotocol: ANDROID_PHONE
      # 是否关闭mirai的bot loggerno-bot-log:true# 关闭mirai网络日志no-network-log:true# mirai bot log切换使用simbot的loguse-simbot-bot-log:true# mirai 网络log 切换使用simbot的loguse-simbot-network-log:true# mirai配置自定义deviceInfoSeed的时候使用的随机种子。默认为1.device-info-seed:1# mirai图片缓存策略,为枚举 love.forte.simbot.component.mirai.configuration.MiraiCacheType 的元素值,# 可选为 FILE、 MEMORYcache-type: MEMORY
      # 如果配置项 simbot.mirai.cacheType 的值为 FILE,此处为缓存文件的保存目录。为空时默认为系统临时文件夹。cache-directory:# 登录验证码处理器,当登录需要输入验证码的时候可能会用到。login-solver-type: DEFAULT
      # 如果不为空,此处代表指定一个 deviceInfo 的 json文件路径。dispatcher:# mirai组件中,对事件进行调度的线程池参数:最大线程数。core-pool-size:8# mirai组件中,对事件进行调度的线程池参数:最大线程数。maximum-pool-size:8# mirai组件中,对事件进行调度的线程池参数:线程存活时间(毫秒)keep-alive-time:1000

在这里插入图片描述
3.3 在springboot启动类加上@EnableSimbot注解

/**
* @author yinfeng
* @description 启动类
* @since 2021/12/22 22:50
*/@EnableSimbot@EnableScheduling@SpringBootApplication@Slf4jpublicclassRobotApplication{publicstaticvoidmain(String[] args){
       SpringApplication.run(RobotApplication.class, args);
       log.info("机器人启动成功~~~~");}}

3.4 simple-robot机器人官方文档

https://www.yuque.com/simpler-robot/simpler-robot-doc/gbqsz5

4、编写定时任务

4.1. 创建一个DrinkNotify.java类

/**
 * @author yinfeng
 * @description 定时喝水提醒
 * @since 2021/12/22 23:32
 */@Component@Slf4jpublicclassDrinkNotify{@Resourceprivate BotManager botManager;@Value("${bello.qq}")private Set<String> qqSet;/**
     * 喝水语录
     */static List<String> content;/**
     * 喝水图片
     */static List<String> images;static{
        content =newArrayList<>();
        images =newArrayList<>();
        log.info("开始加载喝水语录~~~");// 喝水语录
        content.add("俗话说\"女人是水造的\",所以身为女生就要时刻喝水,这样就可以保持充足的水分,皮肤、头发就会更有光泽~");
        content.add("喝多点水还可以保持身材哦,因为水促进了我们身体的循环~");
        content.add("该喝水了哟,喝多点水整体上也会容光焕发~");
        content.add("该喝水了哟,要多爱护自己,多喝水、多吃新鲜水果蔬菜、尽量保证充足睡眠。加油!");
        content.add("多喝水很简单的话,多喝水对身体好!只有心中挂念着你们的人才会说你的家人也老说的话:你要多喝水呀!!~");
        content.add("天气寒冷干燥。多喝水,注意保暖。少抽烟喝酒吃辣。多想念我~");
        log.info("开始加载喝水图片~~~");// 喝水图片
        images.add("https://gitee.com/liujian8/study-image/raw/master/image/20211224221637.jpeg");
        images.add("https://gitee.com/liujian8/study-image/raw/master/image/20211224221739.jpeg");
        images.add("https://gitee.com/liujian8/study-image/raw/master/image/20211224221758.jpeg");
        images.add("https://gitee.com/liujian8/study-image/raw/master/image/20211224221815.jpeg");
        images.add("https://gitee.com/liujian8/study-image/raw/master/image/20211224221834.jpeg");
        images.add("https://gitee.com/liujian8/study-image/raw/master/image/20211224221913.jpeg");
        images.add("https://gitee.com/liujian8/study-image/raw/master/image/20211224221925.jpeg");}/**
     * 每一分钟提醒一次: 0 0/1 * * * ?
     * 每一小时提醒一次: 0 0 0/1 * * ?
     */@Scheduled(cron ="0 0/1 * * * ?")publicvoidhandler(){
        Calendar calendar = Calendar.getInstance();// 获取当前小时int hour = calendar.get(Calendar.HOUR_OF_DAY);// 只在早上9点到晚上8点发送消息提醒if(hour <9|| hour >20){return;}
        qqSet.forEach(qq ->{try{final String msg = content.get(newRandom().nextInt(content.size()));final String img = String.format("[CAT:image,url=%s,flash=false]", images.get(newRandom().nextInt(content.size())));// 发送随机喝水语录
                botManager.getDefaultBot().getSender().SENDER.sendPrivateMsg(qq, msg);// 发送随机喝水图片
                botManager.getDefaultBot().getSender().SENDER.sendPrivateMsg(qq, img);
                log.info("正在发送喝水提醒,当前qq={}, 语录={}, img={}", qq, msg, img);}catch(Exception e){
                log.error("发送喝水提醒异常, qq={}", qq, e);}});}}

4.2. 在yml文件中配置女神们的QQ号

#配置女神们的QQ号,多个QQ用逗号分割bello:qq:1332483344,52000012

在这里插入图片描述

5、加入智能聊天功能

5.1. 这里主要使用青云客的api进行聊天,官网

http://api.qingyunke.com/

5.2. 封装http工具类

/**
 * @author yinfeng
 * @description http工具类
 * @since 2021/12/23 23:21
 */publicclassHttpUtil{/**
     * 向指定URL发送GET方法的请求
     *
     * @param url   发送请求的URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */publicstatic String sendGet(String url, String param){
        StringBuilder result =newStringBuilder();
        BufferedReader in = null;try{
            String urlNameString = url;if(!StringUtils.isEmpty(param)){
                urlNameString +="?"+ param;}
            URL realUrl =newURL(urlNameString);// 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();// 设置通用的请求属性
            connection.setRequestProperty("accept","*/*");
            connection.setRequestProperty("connection","Keep-Alive");
            connection.setRequestProperty("user-agent","Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1");// 建立实际的连接
            connection.connect();// 定义 BufferedReader输入流来读取URL的响应
            in =newBufferedReader(newInputStreamReader(
                    connection.getInputStream()));
            String line;while((line = in.readLine())!= null){
                result.append(line);}}catch(Exception e){
            System.out.println("发送GET请求出现异常!"+ e);
            e.printStackTrace();}// 使用finally块来关闭输入流
        finally{try{if(in != null){
                    in.close();}}catch(Exception e2){
                e2.printStackTrace();}}return result.toString();}}

5.3. 创建消息监听类,支持私聊消息和群消息的智能聊天

/**
 * @author yinfeng
 * @description 机器人监听
 * @since 2021/11/6 20:51
 */@Component@Slf4jpublicclassMessageListener{staticfinal String URL ="http://api.qingyunke.com/api.php";/**
     * 监听私聊消息
     */@OnPrivatepublicvoidprivateMsg(PrivateMsg privateMsg, MsgSender sender){sendMsg(privateMsg, sender);}/**
     * 监听群消息
     */@OnGrouppublicvoidgroupMsg(GroupMsg groupMsg, MsgSender sender){sendMsg(groupMsg, sender);}/**
     * 通过青云客封装智能聊天
     *
     * @param commonMsg commonMsg
     * @param sender    sender
     */privatevoidsendMsg(MessageGet commonMsg, MsgSender sender){
        log.info("智能聊天中~~~,接收消息:qq={}, msg={}", commonMsg.getAccountInfo().getAccountCode(),
                commonMsg.getMsgContent().getMsg());// MsgSender中存在三大送信器,以及非常多的重载方法。// 通过get请求调用聊天接口final String result = HttpUtil.sendGet(URL,"key=free&appid=0&msg=".concat(commonMsg.getMsgContent().getMsg()));if(!StringUtils.isEmpty(result)){final JSONObject json = JSONObject.parseObject(result);if(json.getInteger("result")==0&&!StringUtils.isEmpty(json.getString("content"))){final String msg = json.getString("content").replace("{br}","\n");
                sender.SENDER.sendPrivateMsg(commonMsg, msg);
                log.info("智能聊天中~~~,发送消息:qq={}, msg={}", commonMsg.getAccountInfo().getAccountCode(), msg);}}}}

6、测试一下

6.1. 启动项目
在这里插入图片描述
6.2. 喝水提醒测试
在这里插入图片描述
可以看到两个qq都收到了提醒消息 ,后台日志也有了
在这里插入图片描述
6.3. 智能聊天测试
在这里插入图片描述
可以看到聊天功能也是正常的 ,后台日志也有了
在这里插入图片描述

7、源码地址

// 源码地址,下载运行即可// 也可打成jar包放在服务器一直运行// 老铁们可以加6013505进行智能聊天测试哈
https://gitee.com/liujian8/java-robot

码字不易,老铁们三连一波支持下吧,谢谢大家了~~


本文转载自: https://blog.csdn.net/a1774381324/article/details/122094607
版权归原作者 隐 风 所有, 如有侵权,请联系我们删除。

“用JAVA做个QQ机器人,帮我提醒女神按时喝水和陪她聊天~(带源码)”的评论:

还没有评论