java springBoot实现QQ机器人,定时发送信息,自动回复功能

2023-11-18

--------------------------------文末有源码链接---------------------------------

1. 准备一个空白springBoot项目

(自行百度创建)

2. 引入simple-robot依赖

<properties>
    <java.version>1.8</java.version>
    <simbot.version>2.0.3</simbot.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>love.forte.simple-robot</groupId>
            <artifactId>parent</artifactId>
            <version>${simbot.version}</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

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

3. 配置application.yml文件,使用ANDROID_PAD协议可以保持手机QQ和机器人同时在线

simbot:
  core:
    # 机器人的QQ账号与密码(帐号:密码)
    bots: 123456:123456
  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_WATCH
      protocol: ANDROID_PAD
      # 是否关闭mirai的bot logger
      no-bot-log: true
      # 关闭mirai网络日志
      no-network-log: true
      # mirai bot log切换使用simbot的log
      use-simbot-bot-log: true
      # mirai 网络log 切换使用simbot的log
      use-simbot-network-log: true
      # mirai配置自定义deviceInfoSeed的时候使用的随机种子。默认为1.
      device-info-seed: 1
      # mirai图片缓存策略,为枚举 love.forte.simbot.component.mirai.configuration.MiraiCacheType 的元素值,
      # 可选为 FILE、 MEMORY
      cache-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

4. 在springboot启动类加上@EnableSimbot注解

@EnableSimbot
@EnableScheduling
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@Slf4j
public class RobotApplication {

    public static void main(String[] args) {
        SpringApplication.run(RobotApplication.class, args);
        log.info("机器人启动成功~~~~");
    }
}

5. 创建一个定时类AutoQQMessage.java类

package com.xiaoxiaoguai.robot.scheduling;

import lombok.extern.slf4j.Slf4j;
import love.forte.simbot.bot.BotManager;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Random;
import java.util.Set;

/**
 * @author 小小怪
 * @description 定时发送消息
 * @since 2022/09/15 12:11
 */
@Component
@Slf4j
public class AutoQQMessage {

    @Resource
    private BotManager botManager;

    @Value("${bello.qq}")
    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 * * * ?
     */
    @Scheduled(cron = "0 0/5 * * * ?")
    public void handler() {
        Calendar calendar = Calendar.getInstance();
        // 获取当前小时
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        // 只在早上9点到晚上8点发送消息
        if (hour < 9 || hour > 20) {
            return;
        }
        if (null != qqSet && qqSet.size() > 0){
            qqSet.forEach(qq -> {
                try {
                    final String msg = content.get(new Random().nextInt(content.size()));
                    final String img = String.format("[CAT:image,url=%s,flash=false]", images.get(new Random().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);
                }

            });
        }
    }

}

6. 在yml文件中配置接受消息的QQ号

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

7. 加入智能聊天功能-使用青云客的api进行聊天,官网

http://api.qingyunke.com/

8. 封装http工具类 

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author xiaoxiaoguai
 * @description http工具类
 * @since 2022/09/15 12:11
 */
public class HttpUtil {
    /**
     * 向指定URL发送GET方法的请求
     *
     * @param url   发送请求的URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */
    public static String sendGet(String url, String param) {
        StringBuilder result = new StringBuilder();
        BufferedReader in = null;
        try {
            String urlNameString = url;
            if (!StringUtils.isEmpty(param)) {
                urlNameString += "?" + param;
            }
            URL realUrl = new URL(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 = new BufferedReader(new InputStreamReader(
                    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();
    }
}

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

import com.alibaba.fastjson.JSONObject;
import com.xiaoxiaoguai.robot.entity.LoveChatDTO;
import com.xiaoxiaoguai.robot.util.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import love.forte.simbot.annotation.OnGroup;
import love.forte.simbot.annotation.OnPrivate;
import love.forte.simbot.api.message.Reply;
import love.forte.simbot.api.message.ReplyAble;
import love.forte.simbot.api.message.events.GroupMsg;
import love.forte.simbot.api.message.events.MessageGet;
import love.forte.simbot.api.message.events.PrivateMsg;
import love.forte.simbot.api.sender.MsgSender;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Objects;
import java.util.Random;

/**
 * @author 小小怪
 * @description 机器人监听
 * @since 2022/09/15 10:15
 */
@Component
@Slf4j
public class MessageListener {

    static final String URL = "http://api.qingyunke.com/api.php";

    /**
     * 监听私聊消息
     */
    @OnPrivate
    public void privateMsg(PrivateMsg privateMsg, MsgSender sender) {
        // 智能聊天
        sendMsg(privateMsg, sender, false);
        // 恋爱话术获取
//        loveChat(privateMsg, sender);
    }


    /**
     * 监听群消息
     */
    @OnGroup
    public ReplyAble groupMsg(GroupMsg groupMsg, MsgSender sender) {
        // 默认关闭群聊模式,需要的话把注释去掉
         return sendMsg(groupMsg, sender, true);
//        return null;
    }

    /**
     * 恋爱话术功能
     *
     * @param commonMsg commonMsg
     * @param sender    sender
     */
    private void loveChat(MessageGet commonMsg, MsgSender sender) {
        log.info("恋爱话术~~~,接收消息:qq={}, msg={}", commonMsg.getAccountInfo().getAccountCode(),
                commonMsg.getMsgContent().getMsg());
        // 获取话术
        final JSONObject jsonObject = new JSONObject();
        jsonObject.put("page", 1);
        jsonObject.put("count", 5);
        jsonObject.put("key", commonMsg.getMsgContent().getMsg());
        final String resultStr = HttpUtil.post("https://yin-feng.top/open/getLoveChat", jsonObject.toJSONString());
        if (StringUtils.isEmpty(resultStr)) {
            return;
        }
        final JSONObject resultObj = JSONObject.parseObject(resultStr);
        if (!Objects.equals("0", resultObj.getString("code"))) {
            return;
        }
        final List<LoveChatDTO> loveChatList = JSONObject.parseArray(resultObj.getString("data"), LoveChatDTO.class);
        //发送私聊话术消息
        if (null != loveChatList && loveChatList.size() > 0){
            Random random = new Random();
            int size = loveChatList.size();
            int i = random.nextInt(size);
            LoveChatDTO loveChatDTO = loveChatList.get(i);
            String female = loveChatDTO.getFemale();
            sender.SENDER.sendPrivateMsg(commonMsg, female);
        }
    }

    /**
     * 通过青客云封装智能聊天
     *
     * @param commonMsg commonMsg
     * @param sender    sender
     */
    private ReplyAble sendMsg(MessageGet commonMsg, MsgSender sender, boolean group) {
        log.info("智能聊天中~~~,接收消息:qq={}, msg={}", commonMsg.getAccountInfo().getAccountCode(),
                commonMsg.getMsgContent().getMsg());
        // MsgSender中存在三大送信器,以及非常多的重载方法。
        // 通过get请求调用聊天接口
        final String result = HttpUtil.get(URL.concat("?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");
                log.info("智能聊天中~~~,发送消息:qq={}, msg={}", commonMsg.getAccountInfo().getAccountCode(), msg);
                //发送群消息
                if (group) {
                    // 参数1:回复的消息 参数2:是否at当事人
                    return Reply.reply(msg, true);
                }
                //发送私聊消息
                sender.SENDER.sendPrivateMsg(commonMsg, msg);
            }
        }
        return null;
    }

}

 10. 效果如图

11.  源码链接

https://gitee.com/xxg-git/xiaoxiaoguai-robot.git

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java springBoot实现QQ机器人,定时发送信息,自动回复功能 的相关文章

  • 有没有办法在 java 桌面应用程序上体验 Windows 8 Metro 的外观和感觉?

    正如标题中所述 我真的很难找到这个问题的好答案 我目前正在开发一个仅桌面应用程序 根本没有 CSS 或任何互联网部分 我希望它看起来像 Windows 8 的 Metro 外观 我不是在谈论布局 而是在谈论外观和感觉 我特别喜欢方形而不是圆
  • Hibernate 4 字节码增强不适用于脏检查优化

    我正在使用 Hibernate 4 3 6 并且我使用了最新的Maven 字节码增强 http vladmihalcea com hibernate 4 bytecode enhancement 使所有实体提高自我肮脏意识 我添加了mave
  • 在 Eclipse 中隐藏重复的工具栏项

    我不知道如何 但我的 STS 有重复的工具栏项目 我不知道如何删除它们 这是我复制的工具栏的样子 我想摆脱这些 我试图隐藏工具栏 但这没有帮助 有人知道如何删除重复的吗 自从升级到 Oxygen 以来 我一直遇到同样的问题 我无法可靠地重现
  • 在此代码中,Runnable 未实例化。为什么?

    Runnable cannot instantiate public class Thread4 public static void main String args Thread t1 new Thread new Runnable R
  • 使用 Eclipse 将具有外部依赖项的 Java 项目导出到 jar

    有没有一种简单的方法可以将 Java 项目 包括其所有外部依赖项 导出到标准 jar 文件 我开发了一个使用多个 Apache 库的 SDK 我希望能够将该项目作为单个 jar 发布 到目前为止我找到的这个问题的答案要求将项目打包为 Run
  • 按位运算符简单地翻转整数中的所有位?

    我必须翻转整数的二进制表示形式中的所有位 鉴于 10101 输出应该是 01010 当与整数一起使用时 完成此操作的按位运算符是什么 例如 如果我正在编写类似的方法int flipBits int n 什么会进入身体 我只需要翻转数字中已经
  • Java:无安全管理器:RMI 类加载器已禁用

    您好 我有 RMI 应用程序 现在我尝试从客户端调用服务器上的一些方法 我有以下代码 public static void main final String args try Setting the security manager Sy
  • 如何停止使用扫描仪从标准输入读取多行?

    我正在做一个 JAVA 作业 应该处理多行输入 指令显示 输入是从标准输入读取的 给出了示例输入的示例 one 1 two 2 three 3 我不明白上面的示例输入 从标准输入读取 是什么意思 这是我编写的一个测试程序 它可以消除我的困惑
  • 为什么这个动作不抽象? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我很难理解为什么一个类中的一个操作是抽象的 而另一个类中的操作不是 源代码1 编译时出错 https gyazo com cd3c
  • 想要从java中的char数组创建字符流

    我想从 char 数组构造一个流以使用 java 8 功能 例如过滤器和映射 char list a c e Stream
  • 为什么Java中的文件名与公共类名相同? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在Java中 文件名应该与文件名相同public class包含在该文件中 为什么这是一个限制 它有什么目的 Java 有一个有趣的方法 如果给
  • 如何使用 Swipe 视图实现 Android TabLayout 设计支持库

    我将使用 android TabLayout 设计支持库 但我不知道如何使用滑动视图 这是我的代码 XML
  • 如何从 Java 中“double”类型的值中删除小数值

    我正在调用一个名为 calculateStampDuty 的方法 它将返回 财产需缴纳的印花税金额 百分比计算有效 很好 并返回正确的值 15000 0 但是 我想显示该值 前端用户只是 15000 所以只想删除小数点和任何前面的值 此后
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 在 Java 中的 JFrame/JPanel/JComponent 中添加 Web 浏览器

    我正在开发一个 Java 应用程序 需要在应用程序中使用 Web 浏览器 我见过一些应用程序这样做 例如在同一应用程序中单击左侧面板中的提要并打开右侧面板中的链接时的 RSS 阅读器 我想实现类似的功能 在java中可以做到这一点吗 Jav
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • 将 PropertyPlaceholderConfigurer 中的所有属性注入到 bean 中

    我有一个PropertyPlaceholderConfigurer加载多个属性文件 我想通过配置 XML 将合并的属性映射注入到 Spring Bean 中 我可以这样做以及如何做 您只需创建一个属性 bean 并将其用于您的Propert
  • 使用 Commons 或 Guava 将文本文件转换为 Java Set

    我想将文件中的每一行加载到 HashSet 集合中 有没有一种简单的方法可以做到这一点 怎么样 Sets newHashSet Files readLines file charSet 使用番石榴 参考 文件 readLines http
  • 在java中创建一个XML树并将其转换为json对象

    我尝试创建也能够转换为 json 的树 但对于只有一个xpath 当我尝试实现多个 xpath 时 我无法获得所需的输出 这里我分享一下我的实现 private static Document addElemtbypath List
  • 设置 Firefox 配置文件以使用 Selenium 和 Java 自动下载文件

    我想使用 Selenium WebDriver 和 Java 验证文件下载 要下载的文件为 PDF 格式 当 WebDriver 单击 AUT 中的 下载 链接时 Firefox 将打开以下下载确认窗口 我希望 Firefox 自动下载文件

随机推荐

  • 【pytest】 参数化@pytest.mark.parametrize

    1 创建 test parametrize py 通过 pytest mark parametrize 方法设置参数 import pytest import math pytest参数化 pytest mark parametrize b
  • 中国人寿业务稳定性保障:“1+1+N” 落地生产全链路压测

    引言 保险业务的数字化转型正如火如荼地进行 产品线上化 投保线上化 承保线上化 核保线上化等业务转型 导致系统的应用范围不断扩大 用户的高频访问也正在成为常态 同时 系统复杂性也呈指数上升 这些因素都增加了系统的稳定性风险 中国人寿将无侵入
  • GIS栅格平均值计算

    GIS中批量计算tif栅格文件平均值 coding UTF 8 import arcpy import os inws r C Users DELL Desktop 新建文件夹 arcpy env workspace inws raster
  • ISP(一) 基础知识储备

    ISP image signal processing 图像信号处理芯片 在手机摄像头和车载摄像头等领域有着广泛应用 是图像信号处理的核心芯片 ISP pipeline 流程图如下 光线经过lens镜头 投射到sensor上 经过光电转换成
  • 学习笔记 Day 41 (监督学习分类算法)

    knn 结果不太理想 可以删除row id项 朴素贝叶斯 朴素贝叶斯预测 api省略 def navie bayes 获取数据 fet fetch 20newsgroups subset all print fet 数据基本处理 分割数据
  • linux系统把驱动编译成.ko模块 insmod动态加载

    介绍 Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中 这样当 Linux 内核启动的时候就会自动运行驱动程序 第二种就是将驱动编译成模块 Linux 下模块扩展名为 ko 在Linux 内核启动以后使用 insm
  • 最小错误率的贝叶斯决策和最小风险贝叶斯决策的关系?

    1 基于最小错误率的贝叶斯决策 共w1 wn种决策 本质上就是最大后验概率P wi X 的贝叶斯决策 公式一 P wi X P X wi P wi nj 1 P X wj P wj i 1 n j 1 n 2 最小风险的贝叶斯决策 共a1
  • 【MySQL数据库笔记 - 进阶篇】(二)索引

    个人博客 https blog csdn net Newin2020 spm 1011 2415 3001 5343 专栏地址 https blog csdn net Newin2020 article details 127933422
  • centos 7 jenkins安装

    开发十年 就只剩下这套Java开发体系了 gt gt gt 1 添加yum repos 安装 官方文档 https www jenkins io doc book installing linux red hat centos gt sud
  • MongoDB数据库

    MongoDB 一 简介 1 1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库 官方地址 https www mongodb com 1 2 数据库是什么 数据库 DataBase 是按照数据结构来组织 存储和管
  • Postman使用技巧-环境变量使用

    目录 一 下载安装Postman 二 添加环境与环境变量 三 环境变量使用方法 1 路径中使用变量 2 body中使用变量 3 调用接口前设置变量 4 调用接口后设置变量 一 下载安装Postman 下载安装过程不做赘述 本文章以9 3 1
  • SPWM逆变的原理分析与仿真

    1 单相半桥SPWM逆变电路 1 1 拓扑 下图是单相半桥SPWM逆变电路 含有两个开关管 桥臂中点和直流侧电容中点之间连接负载 输出电压 端口电压 是幅值为0 5Vdc的脉冲波形 1 2 输出电压分析 单相半桥电路的输出电压的主要频率成分
  • 关于QsciScintilla的快捷键设置原理

    经过调试跟踪发现 设置的组合键 修饰键可以是ctrl shift alt的组合 但是第二个键 只能是键值小于0x7f的 从qnamespace文件可知 该按键范围 Key Space Key AsciiTilde 期间包括了各种字母 那么如
  • Unity之自发光Emission效果

    小白欢迎评论 共同探讨 共同进步 写的博文零碎可能比较多 基本是学到啥了写啥 希望可以帮到各位童鞋 同时感谢我看过的各个论坛 博主 同事们的帮助 Unity之自发光Emission效果 很多人都会奇怪 为什么我选了自发光的颜色 强度也调整的
  • Android X86 解决ARM兼容的问题

    最近在Parallels Desktop上安装了64位的Android 9 x86 64 但是很多App只支持arm64 不支持Intel的x86 下面是解决办法 设置中 安卓x86设置 把三个全选上 端口映射5555到Android的55
  • 基于音频和文本的多模态语音情感识别(一篇极好的论文,值得一看哦!)

    基于音频和文本的多模态语音情感识别 语音情感识别是一项具有挑战性的任务 在构建性能良好的分类器时 广泛依赖于使用音频功能的模型 本文提出了一种新的深度双循环编码器模型 该模型同时利用文本数据和音频信号来更好地理解语音数据 由于情感对话是由声
  • EA 的类型/EA 智能交易的介绍(自动化交易/程序化交易/量化交易)

    EA 的类型 EA 智能交易的介绍 自动化交易 程序化交易 量化交易 EA 的类型 1 趋势类 最常见也是最成熟的类型 趋势类 最为主流的 EA 类型 一般根据各种指标和策略来进行出入场操作 2 网格类 网络类的特征 就是单子很多 而且浮亏
  • python引入同一目录下的py文件

    存在一个目录bert base 其中有两个文件 admin py和dealcode py 如果要在admin py中引用dealcode py 则在admin py文件中加一行 from bert base dealcode import
  • 老话新谈之缓存一致性

    前言 缓存一致性常见的更新策略也比较多 如先更新数据库再更新缓存 先删缓存再更新数据库等等 我在理解的时候有些混乱 所以这个文章提供了一些理解上的技巧去理解缓存一致性 为什么会有缓存一致性的问题 缓存与数据库是两套中间件 存在网络抖动之类的
  • java springBoot实现QQ机器人,定时发送信息,自动回复功能

    文末有源码链接 1 准备一个空白springBoot项目 自行百度创建 2 引入simple robot依赖