前言 2020-08-04 更新:由于腾讯封禁第三方机器人,mirai项目有可能会被关闭或停止更新(市面上大部分机器人都跑路了),且用且珍惜吧~
2020-07-28 更新:修复Maven配置不正确的问题,请放心复制
熟悉我的人都知道我是某直播间的房管,最近闲来无聊,决定做一个开播通知机器人,这样开播通知就能交给程序来做了,解放双手岂不美哉~
本项目基于: mirai https://github.com/mamoe/mirai/tree/master b站API大全 https://github.com/SocialSisterYi/bilibili-API-collect
b站API
哔哩哔哩-API收集整理
我们需要获取直播间的信息
示例:
查询我的直播间信息,我的UID为:295904819
只需要打开URL:http://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=295904819 (URL的mid=填写主播的UID,不是直播间号!!! )
这时候我们看到是数据如图:
乱七八糟的看不清,这个时候我们需要用到一款Chrome插件: JSONView
这个时候我们就能很清晰的看清楚字段数据了
我们所需要的就是data 对象里的liveStatus 字段的数据了
当liveStatus 为”1”时,就是直播中,为”0”时就是未开播
QQ机器人 其实我做的这个还算不上机器人,只能说是个程序,毕竟它一点也不智能2333~
mirai
(这个形象图一看就是老二刺猿了hhh)
Mirai是由QQ Android 和 TIM PC 协议支持的
是由纯 Kotlin 实现协议和支持库
常用于项目中的 QQ 协议支持库, 也可以作为单独的应用程序与插件承载 QQ 机器人服务
快速开始
网上找到的一份参考手册
开发要求有一定的kotlin基础,其实也不一定,为什么呢?下面再说~
开发 mirai推荐用Gradle导包,但是我习惯Maven,就用Maven来做吧~
创建项目
导包 打开pom.xml
我们需要用到的包有kotlin,mirai和打包插件 这里直接把配置代码直接复制上去即可
<properties > <kotlin.version > 1.3.72</kotlin.version > </properties > <repositories > <repository > <id > jcenter</id > <url > https://jcenter.bintray.com/</url > </repository > </repositories > <build > <sourceDirectory > src/main/kotlin</sourceDirectory > <plugins > <plugin > <groupId > org.jetbrains.kotlin</groupId > <artifactId > kotlin-maven-plugin</artifactId > <version > ${kotlin.version}</version > <executions > <execution > <id > compile</id > <phase > compile</phase > <goals > <goal > compile</goal > </goals > </execution > <execution > <id > test-compile</id > <phase > test-compile</phase > <goals > <goal > test-compile</goal > </goals > </execution > </executions > <configuration > <jvmTarget > 1.8</jvmTarget > </configuration > </plugin > <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-compiler-plugin</artifactId > <version > 3.1</version > </plugin > <plugin > <artifactId > maven-assembly-plugin</artifactId > <configuration > <archive > <manifest > <mainClass > com.test.app</mainClass > </manifest > </archive > <descriptorRefs > <descriptorRef > jar-with-dependencies</descriptorRef > </descriptorRefs > </configuration > <executions > <execution > <id > make-assemble</id > <phase > package</phase > <goals > <goal > single</goal > </goals > </execution > </executions > </plugin > <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 > <executions > <execution > <goals > <goal > repackage</goal > </goals > </execution > </executions > </plugin > </plugins > </build > <dependencies > <dependency > <groupId > net.mamoe</groupId > <artifactId > mirai-core-qqandroid</artifactId > <version > 1.0.4</version > </dependency > <dependency > <groupId > org.jetbrains.kotlin</groupId > <artifactId > kotlin-stdlib-jdk8</artifactId > <version > ${kotlin.version}</version > </dependency > <dependency > <groupId > org.jetbrains.kotlin</groupId > <artifactId > kotlin-test</artifactId > <version > ${kotlin.version}</version > <scope > test</scope > </dependency > <dependency > <groupId > net.sf.json-lib</groupId > <artifactId > json-lib</artifactId > <version > 2.4</version > <classifier > jdk15</classifier > </dependency > <dependency > <groupId > com.alibaba</groupId > <artifactId > fastjson</artifactId > <version > 1.2.28</version > </dependency > </dependencies >
运行install等待包文件全部下载完成
(下载速度慢请自行换源,这里不做详细讲解)
创建程序文件 在src/main/java/里新建一个*.kt文件
代码如下:
package net.mamoe.mirai.simpleloaderimport com.alibaba.fastjson.JSONExceptionimport net.mamoe.mirai.Botimport net.mamoe.mirai.alsoLoginimport net.mamoe.mirai.event.subscribeMessagesimport net.mamoe.mirai.joinimport net.mamoe.mirai.message.data .AtAllimport net.sf.json.JSONObjectimport java.io.BufferedReaderimport java.io.IOExceptionimport java.io.InputStreamReaderimport java.net.MalformedURLExceptionimport java.net.URL @Throws(JSONException::class) fun loadJson (url: String ?) : String { val json = StringBuilder() try { val urlObject = URL(url) val uc = urlObject.openConnection() val `in ` = BufferedReader(InputStreamReader(uc.getInputStream(), "utf-8" )) var inputLine: String? = null while (`in `.readLine().also { inputLine = it } != null ) { json.append(inputLine) } `in `.close() } catch (e: MalformedURLException) { e.printStackTrace() } catch (e: IOException) { e.printStackTrace() } return json.toString() } @Throws(InterruptedException::class) suspend fun Ask () { val i = 0 while (i < i + 1 ) { val uid = "***" val url = "http://api.live.bilibili.com/room/v1/Room/getRoomInfoOld?mid=$uid " var json = loadJson(url) var jsonObject = JSONObject.fromObject(json) var status = jsonObject.getJSONObject("data" )["liveStatus" ] as Int if (status >= 1 ) { println("开播啦" ) Bot.getInstance(***L).getGroup(***L).sendMessage(AtAll+"开播" ) val j = 0 while (j < j + 1 ) { json = loadJson(url) jsonObject = JSONObject.fromObject(json) status = jsonObject.getJSONObject("data" )["liveStatus" ] as Int if (status >= 1 ) { println("直播中" ) Thread.sleep(1200000 ) continue } else { println("第一次检查到下播" ) Thread.sleep(1200000 ) json = loadJson(url) jsonObject = JSONObject.fromObject(json) status = jsonObject.getJSONObject("data" )["liveStatus" ] as Int if (status >= 1 ) { continue } else { println("第二次检查到下播" ) Thread.sleep(1200000 ) json = loadJson(url) jsonObject = JSONObject.fromObject(json) status = jsonObject.getJSONObject("data" )["liveStatus" ] as Int if (status >= 1 ) { continue } else { println("第三次检查到下播" ) break } } } } } else { println("没有开播" ) Thread.sleep(120000 ) continue } } } @Throws(InterruptedException::class) suspend fun main (args: Array <String >) { val qqId = ***L val password = "***" val miraiBot = Bot(qqId, password).alsoLogin() miraiBot.subscribeMessages{ "测试***" reply "running" } Ask() miraiBot.join() }
代码中所有***的地方都有备注,请自行修改
kotlin的写法跟java其实很相似,其实只要会写java就可以了
为什么呢?因为在IDEA里kotlin支持无缝转换,即:把写好的java代码复制到.kt文件里,IDEA可以一键转换为kotlin写法 ,我就是这么写出来的~
测试 运行时会需要验证QQ
打开URL进行验证,验证完之后关闭窗口即可
打包成jar包
由于我上面的Maven配置已有打包配置,直接运行package即可 生成jar文件在target文件夹里
现在把jar包扔到服务器上运行就可以啦~ 运行命令java -jar ***.jar
版权声明:本文首发于
Dark 的博客,转载请注明出处!