如何用Java写QQ机器人 v2.0
如何用Java寫(xiě)QQ機(jī)器人 v2.0
- 前提
- simple-robot框架
- 官方文檔
- simple-robot mirai組件
- 構(gòu)建項(xiàng)目
- 配置文件
- 寫(xiě)一個(gè)監(jiān)聽(tīng)器類(lèi)
- 編寫(xiě)啟動(dòng)類(lèi)
- 成功了
- 失敗了
- 支持與贊助
這次我想不到什么開(kāi)場(chǎng)白了,直接開(kāi)始吧。
前提
IDE : IntelliJ IDEA
JDK : JDK8+
Maven: 3.6.0+
simple-robot框架
此框架的github地址:https://github.com/ForteScarlet/simpler-robot
simple-robot是一個(gè)目標(biāo)為兼容多平臺(tái)機(jī)器人應(yīng)用的框架。
此框架中已經(jīng)集成了針對(duì)于QQ機(jī)器人的開(kāi)發(fā)組件,因此我們可以使用此框架來(lái)開(kāi)發(fā)一個(gè)QQ機(jī)器人。
官方文檔
在介紹之前,先貼出此框架的官方文檔,如果有能力有興趣的小伙伴可以直接去看看文檔,或者加入他們的交流群。
文檔:https://www.yuque.com/simpler-robot/simpler-robot-doc
simple-robot mirai組件
simple-robot對(duì)接QQ的一個(gè)組件是對(duì)接使用mirai框架進(jìn)行的,并且基于chusimple-robot框架下,除了日志和配置文件以外你應(yīng)當(dāng)感知不到mirai的存在。
simple-robot mirai組件文檔
構(gòu)建項(xiàng)目
我們使用maven構(gòu)建項(xiàng)目,首先導(dǎo)入所需依賴:
版本請(qǐng)參考simple-robot 的 github中的最新版本。
<properties><simbot.version>2.0.1</simbot.version></properties><dependencies><!-- mirai組件依賴。如果使用版本控制,則不需要填寫(xiě)version。 --><dependency><groupId>love.forte.simple-robot</groupId><artifactId>component-mirai</artifactId><version>${simbot.version}</version></dependency></dependencies><build><plugins><!-- compiler plugin. --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target><compilerArgs><arg>-parameters</arg></compilerArgs></configuration></plugin><!-- 打包插件, 用于打包為jar --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.4.RELEASE</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>配置文件
先準(zhǔn)備好配置文件吧,在 resources 目錄下創(chuàng)建一個(gè)配置文件:simbot.yml,不知道什么是 resources 目錄的同學(xué)可以去百度一下補(bǔ)補(bǔ)功課哦~
這里就展示一個(gè)最簡(jiǎn)單的配置:
注意!我建議你關(guān)閉這個(gè)測(cè)試用的賬號(hào)的 設(shè)置 - 賬號(hào)安全 中所有能關(guān)閉的選項(xiàng),例如 登錄設(shè)備管理 - 登錄保護(hù)等。
上述這些可以通過(guò)手機(jī)端進(jìn)行設(shè)置,并自行評(píng)估這樣做的風(fēng)險(xiǎn)。
寫(xiě)一個(gè)監(jiān)聽(tīng)器類(lèi)
新建一個(gè)包路徑:example.bot.listener,當(dāng)然,這個(gè)路徑你可以自己隨便改,然后在這個(gè) listener 包下新建一個(gè)類(lèi):MyListener,當(dāng)然,類(lèi)名也可隨便:
@Beans public class MyListener {// ...}可以看到,需要在類(lèi)上標(biāo)注一個(gè) @Beans 注解,這是simple-robot 中的依賴注入模塊所提供的注解,可以認(rèn)為它是一個(gè)在Springboot中類(lèi)似@Component的注解。
接下來(lái),下一個(gè)監(jiān)聽(tīng)私聊消息的"監(jiān)聽(tīng)函數(shù)",這里我直接copy simple-robot的官方demo項(xiàng)目中的代碼了:
/*** 私聊消息監(jiān)聽(tīng)的示例類(lèi)。* 所有需要被管理的類(lèi)都需要標(biāo)注 {@link Beans} 注解。* @author ForteScarlet*/ @Beans public class MyListener {/*** 通過(guò)依賴注入獲取一個(gè) "消息正文構(gòu)建器工廠"。**/@Dependprivate MessageContentBuilderFactory messageContentBuilderFactory;/*** 此監(jiān)聽(tīng)函數(shù)監(jiān)聽(tīng)一個(gè)私聊消息,并會(huì)復(fù)讀這個(gè)消息,然后再發(fā)送一個(gè)表情。* 此方法上使用的是一個(gè)模板注解{@link OnPrivate},* 其代表監(jiān)聽(tīng)私聊。* 由于你監(jiān)聽(tīng)的是私聊消息,因此參數(shù)中要有個(gè) {@link PrivateMsg} 來(lái)接收這個(gè)消息實(shí)體。** 其次,由于你要“復(fù)讀”這句話,因此你需要發(fā)送消息,* 因此參數(shù)中你需要一個(gè) "消息發(fā)送器" {@link Sender}。** 當(dāng)然,你也可以使用 {@link love.forte.simbot.api.sender.MsgSender},* 然后 {@code msgSender.SENDER}.*/@OnPrivatepublic void replyPrivateMsg1(PrivateMsg privateMsg, Sender sender){// 獲取消息正文。MessageContent msgContent = privateMsg.getMsgContent();// 向 privateMsg 的賬號(hào)發(fā)送消息,消息為當(dāng)前接收到的消息。sender.sendPrivateMsg(privateMsg, msgContent);// 再發(fā)送一個(gè)表情ID為'9'的表情。// 方法1:使用消息構(gòu)建器構(gòu)建消息并發(fā)送// 在絕大多數(shù)情況下,使用消息構(gòu)建器所構(gòu)建的消息正文 'MessageContent'// 是用來(lái)發(fā)送消息最高效的選擇。// 相對(duì)的,MessageContentBuilder所提供的構(gòu)建方法是十分有限的。// 獲取消息構(gòu)建器MessageContentBuilder msgBuilder = messageContentBuilderFactory.getMessageContentBuilder();// 通過(guò).text(...) 向builder中追加一句話。// 通過(guò).face(ID) 向builder中追加一個(gè)表情。// 通過(guò).build() 構(gòu)建出最終消息。MessageContent msg = msgBuilder.text("表情:").face(9).build();// 直接通過(guò)這個(gè)msg發(fā)送。sender.sendPrivateMsg(privateMsg, msg);// 方法2:使用CAT碼發(fā)送消息。// 使用CAT碼構(gòu)建一個(gè)需要解析的消息是最靈活的,// 但是相對(duì)的,它的效率并不是十分的可觀,畢竟在這其中可能會(huì)涉及到很多的'解析'操作。// 獲取CAT碼工具類(lèi)實(shí)例CatCodeUtil catCodeUtil = CatCodeUtil.getInstance();// 構(gòu)建一個(gè)類(lèi)型為 'face', 參數(shù)為 'id=9' 的CAT碼。// 有很多方法。// 1. 通過(guò) codeBuilder 構(gòu)建CAT碼// String cat1 = catCodeUtil.getStringCodeBuilder("face", false).key("id").value(9).build();// 2. 通過(guò)CatCodeUtil.toCat 構(gòu)建CAT碼// String cat2 = catCodeUtil.toCat("face", "id=9");// 3. 通過(guò)模板構(gòu)建CAT碼String cat3 = catCodeUtil.getStringTemplate().face(9);// 在cat碼前增加一句 '表情' 并發(fā)送sender.sendPrivateMsg(privateMsg, "表情:" + cat3);} }編寫(xiě)啟動(dòng)類(lèi)
在上述監(jiān)聽(tīng)函數(shù)的上一層包路徑中,創(chuàng)建一個(gè)啟動(dòng)類(lèi):MyBotApplication:
@SimbotApplication public class MyBotApplication {public static void main(String[] args) {SimbotApp.run(MyBotApplication.class, args);} }然后執(zhí)行main方法,觀察控制臺(tái)信息,因?yàn)樵谇皫状蔚卿浀臅r(shí)候有可能會(huì)出現(xiàn)一些類(lèi)似于需要輸入驗(yàn)證碼啊之類(lèi)的信息。
如果出現(xiàn)了類(lèi)似這樣的日志:
[2021-02-23T17:10:57.189]-[INFO ] | love.f.s.c.c.CoreListenerRegistrar : Start the registration Bot: code=111111111, name=這是bot的名字, level=9999那么這就說(shuō)明你配置文件中填寫(xiě)的賬號(hào)登錄成功了。
接下來(lái),用另外的賬號(hào)私聊這個(gè)賬號(hào),比如說(shuō)一句:你好
如果它也回復(fù)了你,那么恭喜你,第一步已經(jīng)成功了。
成功了
當(dāng)你成功后,你就可以:
- 深入閱讀 simple-robot文檔 來(lái)繼續(xù)編寫(xiě)你的bot。
- 參考 simple-robot-mirai 官方Demo項(xiàng)目來(lái)得到一些啟發(fā)。
- 在遇到不理解的問(wèn)題時(shí),可以通過(guò) github討論區(qū) 與 simple-robot開(kāi)發(fā)團(tuán)隊(duì)交流。
- 遇到bug的時(shí)候通過(guò) github issue 進(jìn)行反饋。
失敗了
不要?dú)怵H,你可以通過(guò) github討論區(qū) 或 github issue 進(jìn)行提問(wèn)或反饋。
支持與贊助
不要忘記,一份贊助是鼓勵(lì)作者的最好方式,你可以通過(guò)贊助simple-robot 來(lái)表示你的支持。
總結(jié)
以上是生活随笔為你收集整理的如何用Java写QQ机器人 v2.0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Echarts】地图 中国城市经纬度J
- 下一篇: 鸿蒙系统是否能玩游戏,鸿蒙系统玩游戏跟安