当前位置: 首页 > news >正文

“舔狗机器人”

1、效果展示

通过网络请求方式实现的低级舔狗机器人
在这里插入图片描述
我这里采用自己编写后端代码和直接调用开放地址实现。

2、封装HTTP类用于发送http请求

package org.example.mirai.plugin;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class HTTP{
    public URL u;
    public HttpURLConnection h;
    public Exception e;
    public HashMap<String,String> header;
    HTTP (String url) {
        try {
            this.u=new URL(url);
            try {
                h= (HttpURLConnection) u.openConnection();
                h.setInstanceFollowRedirects(false);
            } catch (IOException ex) {
                this.e=e;
            }

        } catch (MalformedURLException ex) {
            this.e=e;
        }

    }
    public String get() {
        String res="";
        try {
            h.setRequestMethod("GET");
            BufferedReader in=new BufferedReader(new InputStreamReader(h.getInputStream(),"UTF-8"));
            String line;
            while((line=in.readLine())!=null){
                res+=line;
            }
            in.close();
            return res;
        } catch (Exception e) {
            this.e=e;
            return "";
        }
    }
    public boolean setHeader(HashMap<String,String> header){
        if (header!=null ){
            for (String k : header.keySet()) {
                h.setRequestProperty(k, header.get(k));
            }
            return true;
        }
        return false;
    }

    public String post(String data){
        String res="";
        try {
            h.setRequestMethod("POST");
            h.setDoInput(true);
            h.setDoOutput(true);
            OutputStream ou= h.getOutputStream();
            ou.write(data.getBytes());
            BufferedReader in=new BufferedReader(new InputStreamReader(h.getInputStream(),"UTF-8"));
            String line;
            while((line=in.readLine())!=null){
                res+=line;
            }
            in.close();
            return res;
        } catch (Exception e) {
            this.e=e;
            return "";
        }

    }
    public Map<String, List<String>> getResponseHeader(){
        return h.getHeaderFields();
    }

    public String getCookie(){
        return h.getHeaderField("Set-Cookie");
    }
    public int getCode(){
        try {
            return this.h.getResponseCode();
        } catch (IOException ex) {
            this.e=ex;
            return -1;
        }
    }

}

3、调用开放地址

https://api.xygeng.cn/one

通过浏览器直接访问以上地址会直接返回一个JSON格式的数据
在这里插入图片描述
我们即可对该数据进行处理通过机器人发送,详情请见之前的文章
如何搭建自己的qq机器人(mirai)- 项目搭建
如何搭建自己的qq机器人(mirai)- 事件监听

public static void friendMsg(FriendMessageEvent f) {
	String msg=f.getMessage().serializeToMiraiCode();
	if(msg.equals("经典语录")) {
            HTTP http = new HTTP("https://api.xygeng.cn/one");
            String content = JSON.parseObject(http.get()).getJSONObject("data").getString("content");
            f.getSender().sendMessage(content);
    }
}

该网址返回的为JSON字符串格式,后端操控JSON数据需要先引入相关JSON包,我这里使用的为阿里的fastjson

4、自己编写后端

(1)准备好数据库
在这里插入图片描述
”舔狗语录的“数据量为983条,”深情文案“的为104条,如有需要麻烦点个关注私信我呀。

(2)后端代码编写
我这里采用的为springboot + mybatisplus编写的,项目结构如下
在这里插入图片描述
因为机器人运行是不占用端口的,这里后端就可以不用担心端口被占用了。

(3)机器人调用后端接口
因为我数据库里面id值只是采用了递增。所有就可以直接用范围随机数自动生成id来实现随机发送。

好友消息监听

public static void Qrun(FriendMessageEvent f){

        String msg=f.getMessage().serializeToMiraiCode();
        Random random = new Random();

        if(msg.equals("舔狗语录")) {
            int id = random.nextInt(983) + 1;
            System.out.println(id);
            HTTP http = new HTTP("http://localhost:8080/flatterer/" + id);
            String content = JSON.parseObject(http.get(), Flatterer.class).getContent();

            f.getSender().sendMessage(content);
//            f.getSender().sendMessage("1111");
        } else if(msg.equals("经典语录")) {
            HTTP http = new HTTP("https://api.xygeng.cn/one");
            String content = JSON.parseObject(http.get()).getJSONObject("data").getString("content");
            f.getSender().sendMessage(content);
        } else if(msg.equals("深情文案")) {
            int id = random.nextInt(103) + 1;
            HTTP http = new HTTP("http://localhost:8080/affectionate/" + id);
            String content = JSON.parseObject(http.get(), Affectionate.class).getContent();
            f.getSender().sendMessage(content);
        }
    }

群消息监听同理

public static void Grun(GroupMessageEvent g){
        String msg=g.getMessage().serializeToMiraiCode();
        if(msg.equals("舔狗语录")) {
            Random random = new Random();
            int id = random.nextInt(983) + 1;
            System.out.println(id);
            HTTP http = new HTTP("http://localhost:8080/flatterer/" + id);
            String content = JSON.parseObject(http.get(), Flatterer.class).getContent();

            g.getGroup().sendMessage(content);
        } else if(msg.equals("经典语录")) {
            HTTP http = new HTTP("https://api.xygeng.cn/one");
            String content = JSON.parseObject(http.get()).getJSONObject("data").getString("content");
            g.getGroup().sendMessage(content);
        } else if(msg.equals("深情文案")) {
            Random random = new Random();
            int id = random.nextInt(103) + 1;
            HTTP http = new HTTP("http://localhost:8080/affectionate/" + id);
            String content = JSON.parseObject(http.get(), Affectionate.class).getContent();
            g.getGroup().sendMessage(content);
        }
    }

(4)运行
同时运行机器人和后端即可
在这里插入图片描述
在这里插入图片描述
如需要代码资料,麻烦点个小小的赞和关注然后私信我呀❤。

相关文章:

  • 服务虚拟化HoverFly入门扫盲
  • 踩坑记录——USB键盘睡眠唤醒
  • 【MySQL】官网学习 order by 优化
  • 二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码
  • 【解包裹】基于最小二乘法实现解包裹附matlab代码
  • vim如何进行批量化注释及取消,也在1024表明自己算十分之一的程序员
  • 1024程序员节|【MySQL从入门到精通】【高级篇】(二十七)外连接和内连接如何进行查询优化呢?join的原理了解一波
  • 57.(前端)删除用户操作
  • 手动搭建K8S环境
  • ESP32-C3入门教程 网络篇⑦——基于esp_http_client实现HTTP的POST/GET/PUT/DELETE请求服务器的第三种方法
  • linux Shell入门
  • div与表格应用实例——计算器布局
  • 爬虫的三大库
  • 基于Java+Springboot+Vue+elememt社区疫情防控系统设计和实现
  • 【Linux】yum 与 vim 的基本使用
  • 【comparator, comparable】小总结
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • es6
  • JavaScript异步流程控制的前世今生
  • MySQL数据库运维之数据恢复
  • Node项目之评分系统(二)- 数据库设计
  • socket.io+express实现聊天室的思考(三)
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 基于 Babel 的 npm 包最小化设置
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何设计一个比特币钱包服务
  • 移动端 h5开发相关内容总结(三)
  • 用Python写一份独特的元宵节祝福
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 2017年360最后一道编程题
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (3)选择元素——(17)练习(Exercises)
  • (C#)一个最简单的链表类
  • (floyd+补集) poj 3275
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • .NET : 在VS2008中计算代码度量值
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 动态调用WebService + WSE + UsernameToken
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [20180224]expdp query 写法问题.txt
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!
  • [HEOI2013]ALO
  • [IE编程] 打开/关闭IE8的光标浏览模式(Caret Browsing)
  • [IT生活推荐]大家一起来玩游戏喽,来的都进!