整一个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; }

浙公网安备 33010602011771号