如何用Java写一个聊天机器人

Posted Str_Null

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Java写一个聊天机器人相关的知识,希望对你有一定的参考价值。

文章目录

写在前面的的话

这是一个非常简单的聊天机器人的教程
本来我是不想写的(因为我是懒狗)
但是我在网上找不到类似的教程所以就自己打算写一个
这个机器人我只完成了最简单的功能

  • 学习
  • 根据关键词来产生回复
  • 复读
    还有很多其他的功能可以开发 但是因为我是懒狗所以我打算让我可爱的学弟去进行开发

    如果你发现你的机器人群聊只能发送短字符并且机器人的私聊功能没有问题
    那么你的机器人是被腾讯给风控了
    这是正常的
    解决方法是 你自己上机器人的QQ号多水群就行了
    过一段时间风控就被解除了

免责声明

我不是大佬 我的水平也很低
里面实现的功能也是非常简单的功能(复杂的我也不会)
我从开始做到做完也就花了两天时间 对这个框架的很多功能也不是很了解
我的很多功能也是用很多的方法来实现的
如果你有更好的方法希望你也能写一篇教程让我也学习一下

你需要提前会的东西

  • 最基本的mysql
  • 一点点Linux的使用经验
  • 最简单的Mybatis的使用
  • 一点点使用Spring这种框架的经验(不会也没什么问题)

我们要使用的框架

我希望你在看这篇教程之前先提前看一下教学视频 起码看一下二十多分钟的
<<稍微短一点的视频>>

这个是框架的地址里面已经包含的有教程
框架地址
这里是写框架的老哥录的教学视频 可以说是非常详细了
这里是链接地址
如果你懒得看这个长的 起码你得看一下这个教学视频
稍微短一点的视频
这里面所提供的资料足够你自己完成一个机器人的开发了
但是这篇文章是面向纯纯的小白的所以会更加详细一点

首先我们先下载一个Demo

在教学视频里面已经嗦了Demo在哪下 为了避免小白找不到Demo在哪下我直接把这个Demo的下载链接贴到这里了

Demo地址

文件配置

Demo里面的的目录结构


视频里面已经对监听器里面的功能已经嗦的很明白了
而且demo里面已经打了很多很多的注释去解释功能了 你们看一下就知道怎么用了

在配置文件中加上你小号的QQ名字和密码


为了避免不必要的问题我建议你

在这两个文件里面都配置好
因为我实在不知道还有什么能嗦的所以我下面会讲怎么用Mybatis

我们加完mybatis之后的目录结构


maven里面的配置

因为要用一点新的东西 所以要在
这个里面加一点点东西
因为我是懒狗所以我就不细嗦了
我直接把我的maven配置给放在这里了

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>simbot.example</groupId>
    <artifactId>simbot-mirai-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <simbot.version>2.3.4</simbot.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

        <!-- Mybatis核心 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>



        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
            <version>2.3.11.RELEASE</version>
        </dependency>

        <!-- MySql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!-- 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.11</version>
        </dependency>
        <!--简化bean代码的工具包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.4</version>
        </dependency>

        <!-- mybatis-plus插件依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.1.1</version>
        </dependency>

        <!-- 使用 mirai 组件。 -->
        <dependency>
            <groupId>love.forte.simple-robot</groupId>
            <artifactId>component-mirai</artifactId>
            <version>$simbot.version</version><!--vv-->
        </dependency>

        <!-- 定时任务模块 -->
        <dependency>
            <groupId>love.forte.simple-robot.time-task</groupId>
            <artifactId>time-task-quartz</artifactId>
            <version>$simbot.version</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                    <include>**/*.xml</include>
                    <include>**/*.tld</include>
                    <include>**/*.**</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                    <include>**/*.xml</include>
                    <include>**/*.tld</include>
                </includes>
                <filtering>false</filtering>
            </resource>

        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.5.3</version>
                <configuration>
                    <!-- main方法所在类。 -->
                    <mainClass>love.simbot.example.SimbotExampleApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>



</project>

为了防止SQL注入问题我们用德鲁伊数据库


我们整一个druid文件夹 创建一个MyDruid

package love.simbot.example.druid;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.ibatis.datasource.DataSourceFactory;
import org.apache.ibatis.datasource.pooled.PooledDataSourceFactory;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Properties;

public class MyDruid  implements DataSourceFactory 
    private Properties props;

    @Override
    public DataSource getDataSource() 
        DruidDataSource dds = new DruidDataSource();
        dds.setDriverClassName(this.props.getProperty("driver"));
        dds.setUrl(this.props.getProperty("url"));
        dds.setUsername(this.props.getProperty("username"));
        dds.setPassword(this.props.getProperty("password"));
        try 
            dds.init();
         catch (SQLException e) 
            e.printStackTrace();
        
        return dds;
    

    @Override
    public void setProperties(Properties props) 
        this.props = props;
    




mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

      <environments default="development">
        <!-- mybatis的配置环境 -->
        <environment id="development">
            <!-- 事物管理配置 -->
            <transactionManager type="JDBC" />
            <!-- 数据源的选择 -->
            <dataSource type="love.simbot.example.druid.MyDruid">
                <!-- 数据库链接的配置 -->
                <property name="com.mysql.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://你数据库地址:3306/你的库名?characterEncoding=utf-8&amp;createDatabaseIfNotExist=true&amp;useSSL=false"/>
                <property name="username" value="你数据库的名字"/>
                <property name="password" value="你数据库的密码"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->

    <mappers>
        <mapper resource="mybatis/KVmapper.xml"/>
    </mappers>

</configuration>

建立数据库



建立表这个就没什么值得细嗦的了
实在不会建表就直接右键建就完事了

Mybatis的映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="love.simbot.example.mybatis.mapper.Key_Value_Mapper">
    <insert id="insertKV">
        insert into kv values(NULL,#key,#value);
    </insert>
    <delete id="deleteKV">
        delete  from kv where id=#id
    </delete>

    <select id="get_One_KV_ByKey" resultType="love.simbot.example.mybatis.pojo.Key_Value">
        SELECT * FROM kv WHERE `key`=#key
    </select>
    <select id="get_Some_KV_ByKey" resultType="love.simbot.example.mybatis.pojo.Key_Value">
        SELECT * FROM kv WHERE `key`=#key
    </select>

</mapper>

Mybatis的mapper层

package love.simbot.example.mybatis.mapper;

import love.simbot.example.mybatis.pojo.Key_Value;
import org.apache.ibatis.annotations.Param;


import java.util.ArrayList;


public interface  Key_Value_Mapper  
    int insertKV(@Param("key")String key,@Param("value")String value);
    Key_Value get_One_KV_ByKey(@Param("key")String key);
    ArrayList<Key_Value> get_Some_KV_ByKey(@Param("key")String key);
    int deleteKV(@Param("id")int id);



mybatis的增删改查

因为我是懒狗(主要原因) 而且我感觉没什么写改的必要 所以我没写改的方法

pojo层

package以上是关于如何用Java写一个聊天机器人的主要内容,如果未能解决你的问题,请参考以下文章

试图学习如何用 python 制作一个不和谐的机器人。每次我尝试启动代码时都会出现相同的错误

如何用树莓派做实时视频聊天?

如何用php识别机器人?

如何用java写一个小数

如何用Java开始机器学习

如何用键的虚线名称形成json主体