整一个B站私信自动发送系统(Spring Cloud Alibaba + Vue)(二)

前文

https://www.cnblogs.com/sefuture/p/16665753.html

写在前面

由于太久太久没整,以及工作太忙,这个计划以及搁置好久,其实也进行了一些更新,但是和预想的偏差还是很大

整体刨除了Spring Cloud,仅保留Boot基础功能,另外新增了直播间礼物监听,外置了Golang脚本

页面展示

登录界面

 首页看板

 私信管理

 

 

舰长管理

 其他

其他页面主要包括用户个性化定制的积分部分,目前暂时不加以展示,主要功能是同步用户上船数据,转为积分统计

项目结构

表结构

 

POM文件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.grey.vtuber</groupId>
        <artifactId>center</artifactId>
        <version>1.1-SNAPSHOT</version>
    </parent>
    <packaging>jar</packaging>
    <artifactId>vtubermanagement</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>vtubermanagement</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- nacos作为注册中心 -->
<!--        <dependency>-->
<!--            <groupId>com.alibaba.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<!--        </dependency>-->
        <!-- nacos作为配置中心 -->
<!--        <dependency>-->
<!--            <groupId>com.alibaba.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.15</version>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.14</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.17</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- swagger引入 -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>1.6.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.5.0</version>
        </dependency>


        <!-- 权限认证部分 -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring-boot-starter</artifactId>
            <version>1.10.0</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                            <goal>build-info</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

主要功能代码

私信

/**
     * 发送私聊
     *
     * @param recId      接受人uid
     * @param msg        信息
     * @param userCookie userCookie
     * @return
     */
    public static Short httpPostSendMsg(long recId, String msg, UserCookie userCookie) {
        JSONObject jsonObject = null;
        short code = -1;
        if (userCookie.getUid() == recId) {
            return code;
        }
        // UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("https://api.vc.bilibili.com/web_im/v1/web_im/send_msg");
        String url = "https://api.vc.bilibili.com/web_im/v1/web_im/send_msg";
        RestTemplate restTemplate = new RestTemplate();
        //使用exchange请求接口
        HttpHeaders headers = new HttpHeaders();
        headers.set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36");
        headers.set("referer", "https://message.bilibili.com/");
        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
        headers.set("cookie", userCookie.getCookie());
        params.add("msg[sender_uid]", userCookie.getUid().toString());
        params.add("msg[receiver_id]", String.valueOf(recId));
        params.add("msg[receiver_type]", "1");
        params.add("msg[msg_type]", "1");
        params.add("msg[msg_status]", "0");
        params.add("msg[content]", "{\"content\":\"" + msg + "\"}");
        params.add("msg[timestamp]", String.valueOf(System.currentTimeMillis()).substring(0, 10));
        params.add("msg[new_face_version]", "1");
        params.add("msg[dev_id]", UUID.randomUUID().toString());
        params.add("from_firework", "0");
        params.add("build", "0");
        params.add("mobi_app", "web");
        params.add("csrf_token", userCookie.getBiliJct());
        params.add("csrf", userCookie.getBiliJct());
        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(params, headers);
        ResponseEntity<JSONObject> response = restTemplate.postForEntity(url, httpEntity, JSONObject.class);
        jsonObject = response.getBody();
        code = jsonObject.getShort("code");
        if (code == 0) {
            // 发送私聊成功
        } else {
            LOGGER.error("发送私聊失败,未知错误,原因未知" + jsonObject.toString());
        }
        return code;
    }

舰长同步

    /**
     * 获取舰长列表
     *
     * @param roomId   直播间号
     * @param uid      用户uid
     * @param page     分页数据
     * @param pageSize 分页数据
     * @return 舰长列表
     */
    public JsonRootBean getShipList(String roomId, String uid, Integer page, Integer pageSize) {

        // 封装参数,这里是HashMap
        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(getShipUrl)
                .queryParam("roomid", roomId)
                .queryParam("page", page)
                .queryParam("ruid", uid)
                .queryParam("page_size", pageSize);
        RestTemplate restTemplate = new RestTemplate();
        //使用exchange请求接口
        HttpHeaders headers = new HttpHeaders();
        headers.set("user-agent",
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36");
        HttpEntity<JSONObject> httpEntity = new HttpEntity<>(null, headers);
        ResponseEntity<JSONObject> response = restTemplate.exchange(builder.build().toUri(), HttpMethod.GET, httpEntity, JSONObject.class);
        JsonRootBean result = new JsonRootBean();
        if (response.getStatusCode().equals(HttpStatus.OK) && response.getBody() != null) {
            result = response.getBody().toJavaObject(JsonRootBean.class);
        }
        return result;
    }

 

posted @ 2023-06-05 16:29  糖醋小灰  阅读(191)  评论(0)    收藏  举报