Compare commits

...

No commits in common. "main" and "master" have entirely different histories.
main ... master

59 changed files with 15928 additions and 48 deletions

33
.gitignore vendored Normal file
View File

@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

19
.mvn/wrapper/maven-wrapper.properties vendored Normal file
View File

@ -0,0 +1,19 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip

4
Dockerfile Normal file
View File

@ -0,0 +1,4 @@
FROM openjdk:17-jdk-alpine
ADD ./target/qq-bot-0.0.1-SNAPSHOT.jar /app/qq-bot.jar
CMD ["java", "-jar", "app/qq-bot.jar"]
EXPOSE 8080

45
LICENSE
View File

@ -1,45 +0,0 @@
The Academic Free License
v. 2.0
This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work:
Licensed under the Academic Free License version 2.0
1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license to do the following:
a) to reproduce the Original Work in copies;
b) to prepare derivative works ("Derivative Works") based upon the Original Work;
c) to distribute copies of the Original Work and Derivative Works to the public;
d) to perform the Original Work publicly; and
e) to display the Original Work publicly.
2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and Derivative Works.
3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work.
4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the licensed claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license.
5) This section intentionally omitted.
6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work.
7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer.
8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You.
9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions.
10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, for patent infringement (i) against Licensor with respect to a patent applicable to software or (ii) against any entity with respect to a patent applicable to the Original Work (but excluding combinations of the Original Work with other software or hardware).
11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. ¤ 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License.
12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License.
13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You.
This license is Copyright (C) 2003 Lawrence E. Rosen. All rights reserved.
Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner.

View File

@ -1,3 +0,0 @@
# QQ-bot
基于Mirai框架和springboot搭建的QQ机器人

117
pom.xml Normal file
View File

@ -0,0 +1,117 @@
<?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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mtz</groupId>
<artifactId>qq-bot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>qq-bot</name>
<description>qq-bot</description>
<properties>
<java.version>17</java.version>
<spring-boot.version>2.6.13</spring-boot.version>
<docker.image.prefix>localhost:5000</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>net.itbaima</groupId>
<artifactId>spring-boot-starter-itbaima-robot</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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-actuator</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.mybatis.spring.boot</groupId>-->
<!-- <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!-- <version>2.2.2</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>mysql</groupId>-->
<!-- <artifactId>mysql-connector-java</artifactId>-->
<!-- <version>8.0.31</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>9</source>
<target>9</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.mtz.qqbot.QqBotApplication</mainClass>
<skip>false</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--maven打包时跳过测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!--自动构建镜像到Docker-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<useMavenSettingsForAuth>false</useMavenSettingsForAuth>
</configuration>
<executions>
<execution>
<id>default</id>
<phase>install</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

BIN
robot-data/cache/account.secrets vendored Normal file

Binary file not shown.

162
robot-data/cache/contacts/friends.json vendored Normal file
View File

@ -0,0 +1,162 @@
{
"friendListSeq": 346,
"timeStamp": 213,
"list": [
{
"uin": 46195534,
"nick": "雷雨",
"remark": "教务处雷老师",
"friendGroupId": 0
},
{
"uin": 66600000,
"nick": "babyQ",
"remark": "babyQ",
"friendGroupId": 0
},
{
"uin": 308853450,
"nick": "柒黎桑",
"remark": "群刻晴,时不时来做份牛杂",
"friendGroupId": 0
},
{
"uin": 486967697,
"nick": "花期.",
"remark": "乔帅",
"friendGroupId": 0
},
{
"uin": 524592968,
"nick": "洋",
"remark": "洋",
"friendGroupId": 0
},
{
"uin": 565867928,
"nick": "Hecate",
"remark": "Hecate",
"friendGroupId": 0
},
{
"uin": 739711382,
"nick": "ayemay",
"remark": "Bad蓝岚",
"friendGroupId": 0
},
{
"uin": 806573623,
"nick": "朽木",
"remark": "朽木",
"friendGroupId": 0
},
{
"uin": 939334751,
"nick": "好友久久",
"remark": "好友久久",
"friendGroupId": 0
},
{
"uin": 954787484,
"nick": "Mensc;",
"remark": "神明啊把我变成小萝莉吧お願い",
"friendGroupId": 0
},
{
"uin": 958719296,
"nick": "慕",
"remark": "张国辰",
"friendGroupId": 0
},
{
"uin": 1007100383,
"nick": "空 即 是 色",
"remark": "空 即 是 色",
"friendGroupId": 0
},
{
"uin": 1368740141,
"nick": "小豆泥",
"remark": "小豆泥",
"friendGroupId": 0
},
{
"uin": 1611861156,
"nick": "OK",
"remark": "路通",
"friendGroupId": 0
},
{
"uin": 1669583939,
"nick": "鸽",
"remark": "鸽",
"friendGroupId": 0
},
{
"uin": 2093470482,
"nick": "洋",
"remark": "洋",
"friendGroupId": 0
},
{
"uin": 2144077447,
"nick": "不会起.",
"remark": "不会起.",
"friendGroupId": 0
},
{
"uin": 2253542364,
"nick": "一半",
"remark": "亓志刚",
"friendGroupId": 0
},
{
"uin": 2293904001,
"nick": "",
"remark": "",
"friendGroupId": 0
},
{
"uin": 2399767537,
"nick": "。",
"remark": "wks1234(gta5)",
"friendGroupId": 0
},
{
"uin": 2415198534,
"nick": "尔玉",
"remark": "罗甜甜",
"friendGroupId": 0
},
{
"uin": 2732406248,
"nick": "ぃ白日梦",
"remark": "刘鹏德",
"friendGroupId": 0
},
{
"uin": 2870214741,
"nick": "留在轮回的边缘",
"remark": "李嘉琛",
"friendGroupId": 0
},
{
"uin": 3199694457,
"nick": "山茶猫",
"remark": "沈陈明",
"friendGroupId": 0
},
{
"uin": 3325811059,
"nick": "若木",
"remark": "web设计-徐可",
"friendGroupId": 0
},
{
"uin": 3445667856,
"nick": "૮₍ ˃˂ ₎ა",
"remark": "小号",
"friendGroupId": 0
}
]
}

View File

@ -0,0 +1,147 @@
{
"troopMemberNumSeq": 44,
"list": [
{
"uin": 308853450,
"nick": "柒黎桑",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "群刻晴,时不时来做份牛杂",
"specialTitle": "",
"muteTimestamp": 1684289748,
"anonymousId": null,
"joinTimestamp": 1601451568,
"lastSpeakTimestamp": 1719309817,
"isOfficialBot": false,
"rank": 4,
"point": 591,
"honors": [
3
],
"temperature": 100
},
{
"uin": 939334751,
"nick": "好友久久",
"permission": "MEMBER",
"remark": "",
"nameCard": "群班尼,时不时来群里点赞兼职改车",
"specialTitle": "",
"muteTimestamp": 1662304895,
"anonymousId": null,
"joinTimestamp": 1634394959,
"lastSpeakTimestamp": 1719290412,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 95
},
{
"uin": 954787484,
"nick": "Mensc;",
"permission": "MEMBER",
"remark": "",
"nameCard": "群HR正在招聘致命公司员工",
"specialTitle": "",
"muteTimestamp": 1719297179,
"anonymousId": null,
"joinTimestamp": 1601451568,
"lastSpeakTimestamp": 1719297118,
"isOfficialBot": false,
"rank": 2,
"point": 458,
"honors": [
3
],
"temperature": 100
},
{
"uin": 978129449,
"nick": "听听那冷雨",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "群龟龟,时不时这个家里没有你的位置了",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1695304770,
"lastSpeakTimestamp": 1719309801,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 99
},
{
"uin": 1143469218,
"nick": "我不是数字生命",
"permission": "MEMBER",
"remark": "我不是数字生命",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1719289606,
"lastSpeakTimestamp": 1719289670,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 2
},
{
"uin": 1368740141,
"nick": "小豆泥",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "群流萤,时不时来点燃大海",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1671412875,
"lastSpeakTimestamp": 1719289906,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 9
},
{
"uin": 1393653660,
"nick": "Texaguri",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "群切利尼娜吃根pocky先",
"specialTitle": "",
"muteTimestamp": 1639379023,
"anonymousId": null,
"joinTimestamp": 1636539791,
"lastSpeakTimestamp": 1719313179,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [
2
],
"temperature": 100
},
{
"uin": 2015172744,
"nick": "XYZ",
"permission": "OWNER",
"remark": "",
"nameCard": "群甘雨,时不时来和肥宅切磋",
"specialTitle": "贝极星",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1601451568,
"lastSpeakTimestamp": 1719313250,
"isOfficialBot": false,
"rank": 2,
"point": 118,
"honors": [],
"temperature": 100
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,141 @@
{
"troopMemberNumSeq": 51,
"list": [
{
"uin": 486967697,
"nick": "花期.",
"permission": "ADMINISTRATOR",
"remark": "乔帅",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1671983428,
"lastSpeakTimestamp": 1678103064,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 7
},
{
"uin": 508568881,
"nick": "Jay",
"permission": "MEMBER",
"remark": "Jay",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1672010593,
"lastSpeakTimestamp": 1679283090,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 8
},
{
"uin": 954787484,
"nick": "Mensc;",
"permission": "ADMINISTRATOR",
"remark": "神明啊把我变成小萝莉吧お願い",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1671983428,
"lastSpeakTimestamp": 1680563943,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 9
},
{
"uin": 1368740141,
"nick": "小豆泥",
"permission": "ADMINISTRATOR",
"remark": "小豆泥",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1671983428,
"lastSpeakTimestamp": 1672107298,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 2
},
{
"uin": 1611861156,
"nick": "OK",
"permission": "ADMINISTRATOR",
"remark": "路通",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1671983428,
"lastSpeakTimestamp": 1680889813,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 13
},
{
"uin": 2080638548,
"nick": "招财魚",
"permission": "ADMINISTRATOR",
"remark": "招财魚",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1671983428,
"lastSpeakTimestamp": 1672369697,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 6
},
{
"uin": 2415198534,
"nick": "尔玉",
"permission": "ADMINISTRATOR",
"remark": "罗甜甜",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1671983428,
"lastSpeakTimestamp": 1672373858,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 6
},
{
"uin": 2732406248,
"nick": "ぃ白日梦",
"permission": "OWNER",
"remark": "刘鹏德",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1671983384,
"lastSpeakTimestamp": 1682072589,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 13
}
]
}

View File

@ -0,0 +1,92 @@
{
"troopMemberNumSeq": 125,
"list": [
{
"uin": 524592968,
"nick": "洋",
"permission": "MEMBER",
"remark": "洋",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 1718933896,
"anonymousId": null,
"joinTimestamp": 1718899441,
"lastSpeakTimestamp": 1718939369,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 2
},
{
"uin": 954787484,
"nick": "Mensc;",
"permission": "MEMBER",
"remark": "神明啊把我变成小萝莉吧お願い",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 1719319720,
"anonymousId": null,
"joinTimestamp": 1505138309,
"lastSpeakTimestamp": 1719319660,
"isOfficialBot": false,
"rank": 2,
"point": 5,
"honors": [
1
],
"temperature": 76
},
{
"uin": 1143469218,
"nick": "我不是数字生命",
"permission": "MEMBER",
"remark": "我不是数字生命",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1719075883,
"lastSpeakTimestamp": 1719245306,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 4
},
{
"uin": 1368740141,
"nick": "小豆泥",
"permission": "OWNER",
"remark": "小豆泥",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1524301027,
"lastSpeakTimestamp": 1719319552,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 14
},
{
"uin": 2821090336,
"nick": ".",
"permission": "MEMBER",
"remark": ".",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 1719215547,
"anonymousId": null,
"joinTimestamp": 1718900409,
"lastSpeakTimestamp": 1719304669,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 6
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,260 @@
{
"troopMemberNumSeq": 50,
"list": [
{
"uin": 931777194,
"nick": "美丽人生",
"permission": "MEMBER",
"remark": "美丽人生",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1534323907,
"lastSpeakTimestamp": 1571465754,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 954787484,
"nick": "Mensc;",
"permission": "OWNER",
"remark": "神明啊把我变成小萝莉吧お願い",
"nameCard": "",
"specialTitle": "沙雕",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1521951652,
"lastSpeakTimestamp": 1577024888,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 1007100383,
"nick": "空 即 是 色",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "雅潇是诚信肥宅",
"specialTitle": "耽美脑",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1534323773,
"lastSpeakTimestamp": 1559751504,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 1306235337,
"nick": "鹿琴岚",
"permission": "ADMINISTRATOR",
"remark": "鹿琴岚",
"nameCard": "",
"specialTitle": "诺贝尔奖得主",
"muteTimestamp": 1549457180,
"anonymousId": null,
"joinTimestamp": 1529744017,
"lastSpeakTimestamp": 1566657684,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 1350963986,
"nick": "十一🌙",
"permission": "MEMBER",
"remark": "十一🌙",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1546082110,
"lastSpeakTimestamp": 1577025124,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 1368740141,
"nick": "小豆泥",
"permission": "MEMBER",
"remark": "小豆泥",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1522842418,
"lastSpeakTimestamp": 1529498435,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 1471154545,
"nick": "Ddar1ing",
"permission": "ADMINISTRATOR",
"remark": "Ddar1ing",
"nameCard": "",
"specialTitle": "尻神",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1518600261,
"lastSpeakTimestamp": 1571466599,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 1726685380,
"nick": "智齒發炎",
"permission": "ADMINISTRATOR",
"remark": "智齒發炎",
"nameCard": "",
"specialTitle": "两毛",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1534571017,
"lastSpeakTimestamp": 1571446884,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 2144077447,
"nick": "不会起.",
"permission": "ADMINISTRATOR",
"remark": "不会起.",
"nameCard": "",
"specialTitle": "未来画家",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1531045506,
"lastSpeakTimestamp": 1570333466,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 2358706341,
"nick": "spike",
"permission": "ADMINISTRATOR",
"remark": "spike",
"nameCard": "",
"specialTitle": "赵赵赵",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1518600261,
"lastSpeakTimestamp": 1577025206,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 2771164120,
"nick": "不上班,也会死去",
"permission": "ADMINISTRATOR",
"remark": "不上班,也会死去",
"nameCard": "",
"specialTitle": "班长sama",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1530006031,
"lastSpeakTimestamp": 1572187632,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 2854196306,
"nick": "小冰",
"permission": "MEMBER",
"remark": "小冰",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1566565856,
"lastSpeakTimestamp": 1566697278,
"isOfficialBot": true,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 2876312958,
"nick": "( ′• o •′ )╭☞就是TA",
"permission": "MEMBER",
"remark": "( ′• o •′ )╭☞就是TA",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1529499206,
"lastSpeakTimestamp": 1549278343,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 3025335502,
"nick": "淡淡的",
"permission": "ADMINISTRATOR",
"remark": "淡淡的",
"nameCard": "",
"specialTitle": "一中大哥",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1546093559,
"lastSpeakTimestamp": 1577025787,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 3117325419,
"nick": "0是整数",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "张译心",
"specialTitle": "张dalao",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1534323789,
"lastSpeakTimestamp": 1572186576,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,124 @@
{
"troopMemberNumSeq": 438,
"list": [
{
"uin": 486967697,
"nick": "花期.",
"permission": "MEMBER",
"remark": "乔帅",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1653310269,
"lastSpeakTimestamp": 1655693205,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 9
},
{
"uin": 954787484,
"nick": "Mensc;",
"permission": "MEMBER",
"remark": "神明啊把我变成小萝莉吧お願い",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1653310269,
"lastSpeakTimestamp": 1695267051,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 17
},
{
"uin": 1368740141,
"nick": "小豆泥",
"permission": "OWNER",
"remark": "小豆泥",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1653310268,
"lastSpeakTimestamp": 1655770677,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 3
},
{
"uin": 1611861156,
"nick": "OK",
"permission": "MEMBER",
"remark": "路通",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1653310269,
"lastSpeakTimestamp": 1697105978,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 14
},
{
"uin": 2080638548,
"nick": "招财魚",
"permission": "MEMBER",
"remark": "招财魚",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1653310269,
"lastSpeakTimestamp": 1697125434,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 15
},
{
"uin": 2732406248,
"nick": "ぃ白日梦",
"permission": "MEMBER",
"remark": "刘鹏德",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1653310269,
"lastSpeakTimestamp": 1711343008,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 14
},
{
"uin": 3585453990,
"nick": "兮兮",
"permission": "MEMBER",
"remark": "兮兮",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1655720727,
"lastSpeakTimestamp": 1710059509,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 11
}
]
}

View File

@ -0,0 +1,317 @@
{
"troopMemberNumSeq": 73,
"list": [
{
"uin": 214943778,
"nick": "...",
"permission": "MEMBER",
"remark": "...",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1694180099,
"lastSpeakTimestamp": 1718942986,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 25
},
{
"uin": 443561257,
"nick": "******",
"permission": "MEMBER",
"remark": "******",
"nameCard": "",
"specialTitle": "希哲",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1673111354,
"lastSpeakTimestamp": 1703169272,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 10
},
{
"uin": 954787484,
"nick": "Mensc;",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "离沼鹤什么时候穿白丝",
"specialTitle": "小黑",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1581231182,
"lastSpeakTimestamp": 1718966338,
"isOfficialBot": false,
"rank": 2,
"point": 322,
"honors": [],
"temperature": 100
},
{
"uin": 982545933,
"nick": "清栩",
"permission": "MEMBER",
"remark": "清栩",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1705905892,
"lastSpeakTimestamp": 1719287704,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 21
},
{
"uin": 1025391373,
"nick": "BooM",
"permission": "OWNER",
"remark": "",
"nameCard": "鸽子王",
"specialTitle": "夏宇",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1575788884,
"lastSpeakTimestamp": 1719279564,
"isOfficialBot": false,
"rank": 2,
"point": 862,
"honors": [],
"temperature": 100
},
{
"uin": 1125321572,
"nick": "晴天",
"permission": "MEMBER",
"remark": "晴天",
"nameCard": "",
"specialTitle": "阿跃",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1673111354,
"lastSpeakTimestamp": 1687653516,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 16
},
{
"uin": 1205905150,
"nick": "L'égalité",
"permission": "MEMBER",
"remark": "L'égalité",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1694615938,
"lastSpeakTimestamp": 1703168757,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 2
},
{
"uin": 1294668464,
"nick": "lain",
"permission": "ADMINISTRATOR",
"remark": "lain",
"nameCard": "",
"specialTitle": "芝麻",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1674212792,
"lastSpeakTimestamp": 1719316232,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 70
},
{
"uin": 1368740141,
"nick": "小豆泥",
"permission": "MEMBER",
"remark": "小豆泥",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1644063888,
"lastSpeakTimestamp": 1718942795,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 4
},
{
"uin": 1374625375,
"nick": "邶风",
"permission": "ADMINISTRATOR",
"remark": "邶风",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1693914719,
"lastSpeakTimestamp": 1719316080,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 93
},
{
"uin": 1669583939,
"nick": "鸽",
"permission": "ADMINISTRATOR",
"remark": "鸽",
"nameCard": "",
"specialTitle": "万益",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1575788885,
"lastSpeakTimestamp": 1719290838,
"isOfficialBot": false,
"rank": 3,
"point": 1419,
"honors": [],
"temperature": 100
},
{
"uin": 1925867435,
"nick": "今天是礼物",
"permission": "MEMBER",
"remark": "今天是礼物",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1686142031,
"lastSpeakTimestamp": 1686142031,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 0
},
{
"uin": 2380720575,
"nick": "天际浮云",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "知识学爆",
"specialTitle": "龙龙",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1575788885,
"lastSpeakTimestamp": 1719315776,
"isOfficialBot": false,
"rank": 2,
"point": 1275,
"honors": [
3
],
"temperature": 100
},
{
"uin": 2529532811,
"nick": "宇",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "什么,我被群友包围了!",
"specialTitle": "非凡",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1659707634,
"lastSpeakTimestamp": 1719315974,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [
2
],
"temperature": 100
},
{
"uin": 2623362709,
"nick": "一只寒武纪",
"permission": "ADMINISTRATOR",
"remark": "",
"nameCard": "寒武纪(群挂哥)",
"specialTitle": "聊文",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1654620022,
"lastSpeakTimestamp": 1719315908,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [
1
],
"temperature": 100
},
{
"uin": 2681316006,
"nick": "寻找热爱",
"permission": "MEMBER",
"remark": "",
"nameCard": "不名旧里",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1705905892,
"lastSpeakTimestamp": 1719071506,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 29
},
{
"uin": 3222876804,
"nick": "HuTao",
"permission": "MEMBER",
"remark": "HuTao",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 1669721571,
"anonymousId": null,
"joinTimestamp": 1669642857,
"lastSpeakTimestamp": 1718961041,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 12
},
{
"uin": 3445667856,
"nick": "૮₍ ˃˂ ₎ა",
"permission": "MEMBER",
"remark": "小号",
"nameCard": "",
"specialTitle": "",
"muteTimestamp": 0,
"anonymousId": null,
"joinTimestamp": 1642828797,
"lastSpeakTimestamp": 1705668054,
"isOfficialBot": false,
"rank": 1,
"point": 0,
"honors": [],
"temperature": 17
}
]
}

38
robot-data/cache/servers.json vendored Normal file
View File

@ -0,0 +1,38 @@
[
{
"host": "msfwifi.3g.qq.com",
"port": 8080
},
{
"host": "116.130.229.191",
"port": 80
},
{
"host": "182.50.15.44",
"port": 80
},
{
"host": "123.125.0.195",
"port": 80
},
{
"host": "220.194.118.236",
"port": 80
},
{
"host": "182.50.8.188",
"port": 8080
},
{
"host": "157.148.55.96",
"port": 443
},
{
"host": "157.255.5.104",
"port": 8080
},
{
"host": "153.3.244.48",
"port": 14000
}
]

2
robot-data/cache/session.bin vendored Normal file
View File

@ -0,0 +1,2 @@
h'”ºLíe¯ˆíÍ"qj½Ä€¡Ë<C2A1>x§å$/žËVà9zQ6ÚZ¯ÌÓ³Jë><3E>2ïÖ<C3AF>*90;å©Ùƒ¼Õ±DC#Ðj ÐÙ2„À[eO¶& )ÉQŒ‡øš§)ë² dmtWkf9fgTW67wH4 Ú™„Ã<10>?ô„’Ïúÿÿÿÿ<10>? ð¬™ßþÿÿÿÿP <08>©»" ýΠ“»" ™‡¼Ù»"Ü…Û“ýÿÿÿÿ»" ™Ë”û»

1
robot-data/cache/validator.bin vendored Normal file
View File

@ -0,0 +1 @@
ø)Ë4LÙ±>¬o5†œÆ0@©Ð<C2A9>j

View File

@ -0,0 +1,30 @@
{
"deviceInfoVersion": 3,
"data": {
"display": "MIRAI.392537.001",
"product": "mirai",
"device": "mirai",
"board": "mirai",
"brand": "mamoe",
"model": "mirai",
"bootloader": "unknown",
"fingerprint": "mamoe/mirai/mirai:10/MIRAI.200122.001/5356319:user/release-keys",
"bootId": "C16ED143-ED2F-19D7-E471-613A1016DC57",
"procVersion": "Linux version 3.0.31-9ucOo77W (android-build@xxx.xxx.xxx.xxx.com)",
"baseBand": "",
"version": {
"incremental": "5891938",
"release": "10",
"codename": "REL"
},
"simInfo": "T-Mobile",
"osType": "android",
"macAddress": "02:00:00:00:00:00",
"wifiBSSID": "02:00:00:00:00:00",
"wifiSSID": "<unknown ssid>",
"imsiMd5": "1e993634b646cf697263ded647a6d7f5",
"imei": "864839791425396",
"apn": "wifi",
"androidId": "3f252824bf2e97d9"
}
}

View File

@ -0,0 +1,28 @@
package com.mtz.qqbot.Controller;
import com.mtz.qqbot.Listener.HandleMessageListener;
import com.mtz.qqbot.Listener.RecallMessageListener;
import com.mtz.qqbot.Listener.ReceiveGroupListener;
import com.mtz.qqbot.Listener.fishListener;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class listController {
@GetMapping("/messagelist")
public String list() {
return "今日好友消息:[" + HandleMessageListener.friendMessageCount + "]条<br>" +
"今日群聊1消息[" + HandleMessageListener.group1MessageCount + "]条<br>" +
"今日群聊2消息[" + HandleMessageListener.group2MessageCount + "]条<br>" +
"牢豆年糕汤消息:[" + HandleMessageListener.group3MessageCount + "]条<br>" +
"今日收到的群聊临时会话消息:[" + HandleMessageListener.groupTempMessageCount + "]条<br><br>" +
"今日群聊1违禁消息[" + RecallMessageListener.group1InvalidCount + "]条<br>" +
"今日群聊2违禁消息[" + RecallMessageListener.group2InvalidCount + "]条<br>" +
"今日群聊1违禁超过5次的QQ号名单" + RecallMessageListener.group1InvalidMember + "<br>" +
"今日群聊2违禁超过5次的QQ号名单" + RecallMessageListener.group2InvalidMember + "<br><br>" +
"今日机器人被骚扰次数:[" + ReceiveGroupListener.receiveCount + "]<br>" +
"今日钓鱼次数:[" + fishListener.fishCount + "]<br><br>" +
"<a href='index.html'>返回标题页面</a>";
}
}

View File

@ -0,0 +1,54 @@
package com.mtz.qqbot.Listener;
import net.itbaima.robot.event.RobotListener;
import net.itbaima.robot.event.RobotListenerHandler;
import net.mamoe.mirai.event.events.FriendMessageEvent;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import net.mamoe.mirai.event.events.GroupTempMessageEvent;
@RobotListener
public class HandleMessageListener {
public static int friendMessageCount = 0;
public static int group1MessageCount = 0;
public static int group2MessageCount = 0;
public static int group3MessageCount = 0;
public static int groupTempMessageCount = 0;
@RobotListenerHandler//接收来自好友的消息打印到控制台
public void handleFriendMessage(FriendMessageEvent event) {
String message = event.getMessage().contentToString();
System.out.println("来自" + event.getSenderName() + "的消息:" + message);
friendMessageCount++;
}
public void handleGroupMessage(GroupMessageEvent event) {//接收来自群聊的消息打印到控制台
String message = event.getMessage().contentToString();
System.out.println(event.getGroup() + "" + event.getSenderName() + "”的群聊消息:" + message);
}
@RobotListenerHandler(contactId = 518909220)
public void handleGroup1Message(GroupMessageEvent event) {
handleGroupMessage(event);
group1MessageCount++;
}
@RobotListenerHandler(contactId = 1033597003)
public void handleGroup2Message(GroupMessageEvent event) {
handleGroupMessage(event);
group2MessageCount++;
}
@RobotListenerHandler(contactId = 850111709)
public void handleGroupLAODOUMessage(GroupMessageEvent event) {
handleGroupMessage(event);
group3MessageCount++;
}
@RobotListenerHandler
public void handleGroupTempMessage(GroupTempMessageEvent event) {
String message = event.getMessage().contentToString();
System.out.println("来自群聊:" + event.getGroup() + "" + event.getSenderName() + "”的临时对话:" + message);
groupTempMessageCount++;
}
}

View File

@ -0,0 +1,51 @@
package com.mtz.qqbot.Listener;
import com.mtz.qqbot.Tool.invalidMember;
import net.itbaima.robot.event.RobotListener;
import net.itbaima.robot.event.RobotListenerHandler;
import net.itbaima.robot.listener.MessageListener;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RobotListener
public class RecallMessageListener extends MessageListener {
public static int group1InvalidCount = 0;
public static int group2InvalidCount = 0;
public Map<Long, Integer> group1MemberInvalidedCountList = new HashMap<Long, Integer>();
public static List<Long> group1InvalidMember = new ArrayList<Long>();
public Map<Long, Integer> group2MemberInvalidedCountList = new HashMap<Long, Integer>();
public static List<Long> group2InvalidMember = new ArrayList<Long>();
public RecallMessageListener() {
super(List.of("原神"), true);//自定义违禁词
}
public int recall(GroupMessageEvent event, int groupInvalidCount, Map<Long, Integer> groupMemberInvalidedCountList, List<Long> groupInvalidMember) throws InterruptedException {//当有人发违禁词自动撤回并禁言一分钟
String message = event.getMessage().contentToString();
if (this.invalidText(message)) {
event.getSender().mute(60);//禁言60秒
Thread.sleep(500);//半秒后撤回方便演示
this.recallMessage(event.getMessage());
groupInvalidCount++;
invalidMember.invalidCountList(groupMemberInvalidedCountList, event);
invalidMember.invalidMemberList(groupInvalidMember, groupMemberInvalidedCountList, event);
return groupInvalidCount;
}
return groupInvalidCount;
}
@RobotListenerHandler(contactId = 518909220)//监控增加群聊1
public void recallGroup1Message(GroupMessageEvent event) throws InterruptedException {
group1InvalidCount = recall(event, group1InvalidCount, group1MemberInvalidedCountList, group1InvalidMember);
}
@RobotListenerHandler(contactId = 1033597003)//监控增加群聊2
public void recallGroup2Message(GroupMessageEvent event) throws InterruptedException {
group2InvalidCount = recall(event, group2InvalidCount, group2MemberInvalidedCountList, group2InvalidMember);
}
}

View File

@ -0,0 +1,34 @@
package com.mtz.qqbot.Listener;
import net.itbaima.robot.event.RobotListener;
import net.itbaima.robot.event.RobotListenerHandler;
import net.itbaima.robot.listener.MessageListener;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import net.mamoe.mirai.message.data.*;
import java.util.List;
@RobotListener//群聊里发关键词,bot自动艾特并回复
public class ReceiveGroupListener extends MessageListener {
public static int receiveCount = 0;
public ReceiveGroupListener() {
super(List.of("111"), false);//自定义关键词
}
@RobotListenerHandler(contactId = {518909220, 1033597003})
public void receive(GroupMessageEvent event) {
String message = event.getMessage().contentToString();
if (this.invalidText(message)) {//当检测到关键词
MessageChain chain = new MessageChainBuilder()//此为固定写法
.append(new At(event.getSender().getId()))//自动艾特
.append(new PlainText(" 你好,"))
.append(new PlainText("请问有什么可以帮到你"))
.build();
//上面的代码构建了一个MessageChain集合用来储存要发送的内容
event.getGroup().sendMessage(chain);//发送消息到群聊
System.out.println(chain);
receiveCount++;
}
}
}

View File

@ -0,0 +1,57 @@
package com.mtz.qqbot.Listener;
import net.itbaima.robot.event.RobotListener;
import net.itbaima.robot.event.RobotListenerHandler;
import net.itbaima.robot.listener.MessageListener;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import net.mamoe.mirai.message.data.At;
import net.mamoe.mirai.message.data.MessageChain;
import net.mamoe.mirai.message.data.MessageChainBuilder;
import java.util.List;
import java.util.Random;
@RobotListener
public class fishListener extends MessageListener {
public static int fishCount = 0;
String[] fishes = {"鲨鱼", "金龙鱼", "鲤鱼", "鲫鱼", "鲅鱼", "罗非鱼", "鲸鱼", "闲鱼", "萨卡班甲鱼", ""};
public fishListener() {
super(List.of("钓鱼"), true);
}
@RobotListenerHandler(order = 1)
public void fishing(GroupMessageEvent event) throws InterruptedException {
Random random = new Random();
String message = event.getMessage().contentToString();
if (this.invalidText(message)) {
MessageChain chain = new MessageChainBuilder()
.append(new At(event.getSender().getId()))
.append(" 开始钓鱼10秒后收杆")
.build();
event.getGroup().sendMessage(chain);//发送消息到群聊
System.out.println(chain);
Thread.sleep(10000);
int whichFish = random.nextInt(fishes.length);
if (whichFish == fishes.length - 1) {
chain = new MessageChainBuilder()
.append(new At(event.getSender().getId()))
.append(" 你空军了!")
.build();
event.getGroup().sendMessage(chain);
System.out.println(chain);
} else {
chain = new MessageChainBuilder()
.append(new At(event.getSender().getId()))
.append(" 你钓上来了一条" + fishes[whichFish])
.build();
event.getGroup().sendMessage(chain);//发送消息到群聊
System.out.println(chain);
}
fishCount++;
}
}
}

View File

@ -0,0 +1,53 @@
package com.mtz.qqbot.Listener;
import net.itbaima.robot.event.RobotListener;
import net.itbaima.robot.event.RobotListenerHandler;
import net.itbaima.robot.listener.MessageListener;
import net.mamoe.mirai.event.events.FriendMessageEvent;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import net.mamoe.mirai.event.events.GroupTempMessageEvent;
import net.mamoe.mirai.message.data.At;
import net.mamoe.mirai.message.data.MessageChain;
import net.mamoe.mirai.message.data.MessageChainBuilder;
import java.util.List;
import java.util.Scanner;
@RobotListener
public class sendByConsoleListener extends MessageListener {
public sendByConsoleListener() {
super(List.of("呼叫管理"), false);
}
@RobotListenerHandler(concurrency = true)//收到好友消息后通过控制台给好友发一条消息
public void sendMessageToFriend(FriendMessageEvent event) {
Scanner input = new Scanner(System.in);
String str = input.nextLine();//控制台输入
event.getFriend().sendMessage(str);//发送到群聊
System.out.println("机器人发送:" + str);
}
@RobotListenerHandler(concurrency = true)//当有人消息中带有呼叫管理可以从控制台输入一条消息发送
public void sendMessageToGroup(GroupMessageEvent event) {
String message = event.getMessage().contentToString();
if (this.invalidText(message)) {
Scanner input = new Scanner(System.in);
String str = input.nextLine();
MessageChain chain = new MessageChainBuilder()
.append(new At(event.getSender().getId()))
.append(" ")
.append(str)
.build();
event.getGroup().sendMessage(chain);
System.out.println("机器人发送:" + chain);
}
}
@RobotListenerHandler(concurrency = true)
public void sendMessageToStranger(GroupTempMessageEvent event) {
Scanner input = new Scanner(System.in);
String str = input.nextLine();
event.getSender().sendMessage(str);
System.out.println("机器人发送:" + str);
}
}

View File

@ -0,0 +1,154 @@
package com.mtz.qqbot.Listener;
import com.mtz.qqbot.Tool.isNumber;
import net.itbaima.robot.event.RobotListener;
import net.itbaima.robot.event.RobotListenerHandler;
import net.itbaima.robot.listener.MessageListener;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import net.mamoe.mirai.message.data.At;
import net.mamoe.mirai.message.data.MessageChain;
import net.mamoe.mirai.message.data.MessageChainBuilder;
import java.util.List;
@RobotListener//此文件为废案
public class txtGameListener extends MessageListener {
int isStart = 0;
int isFirst = 0;
int isSecond = 0;
public txtGameListener() {
super(List.of("txtgame"), true);
}
@RobotListenerHandler()
public void txtGameRunning(GroupMessageEvent event) {
String message = event.getMessage().contentToString();
if (this.invalidText(message) && isStart == 0) {
MessageChain chain = new MessageChainBuilder()
.append("迷失的时空之门\n\n")
.append("你站在一片神秘的废墟之中,四处弥漫着古老的气息。前方有三条道路,你必须选择一个方向前行。\n")
.append("1.选择左边的道路,看似古老而神秘。\n" +
"2.选择中间的道路,路上散落着一些发光的碎片。\n" +
"3.选择右边的道路,尽头似乎有一扇石门。")
.build();
event.getGroup().sendMessage(chain);
System.out.println(chain);
isStart = 1;
String gameMessage;
if (isFirst == 0) {
while (!isNumber.isNum(gameMessage = event.getMessage().contentToString())) {
continue;
}
System.out.println(gameMessage.getClass() + " " + gameMessage);
isFirst = 1;
} else {
gameMessage = "0";
}
switch (gameMessage) {
case "1":
chain = new MessageChainBuilder()
.append(new At(event.getSender().getId()))
.append("你沿着左边的道路深入,发现了一个隐藏的洞穴。洞穴里充满了未知的危险,你必须做出选择。\n" +
"\n" +
"1.深入洞穴,寻找可能的宝藏。\n" +
"2.退回废墟,选择其他道路。\n" +
"3.使用一个发光碎片照亮洞穴。")
.build();
event.getGroup().sendMessage(chain);
System.out.println(chain);
break;
case "0":
String gameMessage2;
if (isSecond == 0) {
while (!isNumber.isNum(gameMessage2 = event.getMessage().contentToString())) {
continue;
}
System.out.println(gameMessage2.getClass() + " " + gameMessage2);
isSecond = 1;
} else {
gameMessage2 = "0";
}
switch (gameMessage2) {
case "1":
chain = new MessageChainBuilder()
.append("你深入洞穴,发现了一处古老的祭坛。你面前有三个选项。\n" +
"\n" +
"激活祭坛,看看会发生什么。\n" +
"拿走祭坛上的神秘物品。\n" +
"留下标记,下次再来探索。")
.build();
event.getGroup().sendMessage(chain);
System.out.println(chain);
break;
case "0":
}
}
}
}
}
//文字游戏迷失的时空之门
//开始
//你站在一片神秘的废墟之中四处弥漫着古老的气息前方有三条道路你必须选择一个方向前行
//选项1
//
//选择左边的道路看似古老而神秘
//选择中间的道路路上散落着一些发光的碎片
//选择右边的道路尽头似乎有一扇石门
//
//选择左边的道路
//你沿着左边的道路深入发现了一个隐藏的洞穴洞穴里充满了未知的危险你必须做出选择
//
//深入洞穴寻找可能的宝藏
//退回废墟选择其他道路
//使用一个发光碎片照亮洞穴
//
//选择深入洞穴
//你深入洞穴发现了一处古老的祭坛你面前有三个选项
//
//激活祭坛看看会发生什么
//拿走祭坛上的神秘物品
//留下标记下次再来探索
//
//选择激活祭坛
//你激活了祭坛突然间你被传送到了一个未知的世界你面临着三个选择
//
//寻找回到原来世界的方法
//探索这个新世界寻找宝藏
//寻求当地人的帮助
//
//结局一找到回家的路
//你经过艰苦的探索终于找到了回到原来世界的方法你回到了废墟带着一段难忘的经历
//结局二成为新世界的王者
//你在新世界中找到了宝藏并且赢得了当地人的尊敬你成为了新世界的王者开启了一段新的传奇
//结局三迷失在时空
//你未能找到回家的方法也未能适应新世界的生活你迷失在时空之中成为了一个永恒的流浪者
//
//选择中间的道路
//你选择了中间的道路发现这些发光碎片其实是时空碎片你可以利用它们进行传送
//
//使用碎片传送到一个富饶的王国
//使用碎片传送到一个危险的丛林
//保留碎片寻找更好的使用时机
//
//选择使用碎片传送到富饶的王国
//你在富饶的王国中过上了舒适的生活但你也渐渐失去了冒险的激情
//结局四安逸的生活
//你在富饶的王国中度过了一生虽然平淡但也安稳
//选择右边的道路
//你推开了石门发现了一扇时空之门你可以选择进入或者留在原地
//
//进入时空之门探索未知的时空
//留在原地等待其他机会
//使用发光碎片强化自己后再进入
//
//选择进入时空之门
//你穿越了时空之门来到了一个充满魔法的世界你的冒险才刚刚开始
//结局五魔法的冒险者
//你在魔法的世界中成为了一名勇敢的冒险者与各种魔法生物展开了激战
//结局六永恒的守护者
//你决定留在魔法的世界守护这个世界的和平与安宁成为了一名永恒的守护者

View File

@ -0,0 +1,34 @@
package com.mtz.qqbot.Listener;
import com.mtz.qqbot.Service.vService;
import net.itbaima.robot.event.RobotListener;
import net.itbaima.robot.event.RobotListenerHandler;
import net.itbaima.robot.listener.MessageListener;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import net.mamoe.mirai.message.data.At;
import net.mamoe.mirai.message.data.MessageChain;
import net.mamoe.mirai.message.data.MessageChainBuilder;
import java.util.List;
@RobotListener
public class vDecryptListener extends MessageListener {
public vDecryptListener() {
super(List.of("解密"), true);
}
@RobotListenerHandler
public void decrypt(GroupMessageEvent event) {
String message = event.getMessage().contentToString();
if (this.invalidText(message)) {
String[] originMessage = message.split(" ");
String plaintext = String.valueOf(vService.Decrypt(originMessage));
MessageChain chain = new MessageChainBuilder()
.append(new At(event.getSender().getId()))
.append(" ")
.append(plaintext)
.build();
event.getGroup().sendMessage(chain);
}
}
}

View File

@ -0,0 +1,35 @@
package com.mtz.qqbot.Listener;
import com.mtz.qqbot.Service.vService;
import net.itbaima.robot.event.RobotListener;
import net.itbaima.robot.event.RobotListenerHandler;
import net.itbaima.robot.listener.MessageListener;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import net.mamoe.mirai.message.data.At;
import net.mamoe.mirai.message.data.MessageChain;
import net.mamoe.mirai.message.data.MessageChainBuilder;
import java.io.IOException;
import java.util.List;
@RobotListener
public class vEncryptListener extends MessageListener {
public vEncryptListener() {
super(List.of("加密"), true);
}
@RobotListenerHandler
public void encrypt(GroupMessageEvent event) throws IOException {
String message = event.getMessage().contentToString();
if (this.invalidText(message)) {
String[] originMessage = message.split(" ");
String ciphertext = String.valueOf(vService.Encrypt(originMessage));
MessageChain chain = new MessageChainBuilder()
.append(new At(event.getSender().getId()))
.append(" ")
.append(ciphertext)
.build();
event.getGroup().sendMessage(chain);
}
}
}

View File

@ -0,0 +1,13 @@
package com.mtz.qqbot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class QqBotApplication {
public static void main(String[] args) {
SpringApplication.run(QqBotApplication.class, args);
}
}

View File

@ -0,0 +1,68 @@
package com.mtz.qqbot.Service;
import com.mtz.qqbot.Tool.vTools;
import java.io.IOException;
import java.util.ArrayList;
import static com.mtz.qqbot.Tool.vTools.alphabet;
public class vService {
public static StringBuilder Encrypt(String[] originMessage) throws IOException {
//加密
String passwd = originMessage[2];
char[] passwd1 = passwd.toCharArray();
ArrayList<Integer> passwdList = vTools.Transform(passwd1);
//System.out.println("密钥转换为密钥数字串为:" + passwdList);
String plaintext = originMessage[1];
char[] plaintext1 = plaintext.toCharArray();
ArrayList<Integer> plaintextList = vTools.Transform(plaintext1);
//System.out.println("明文转换为明文数字串为" + plaintextList);
vTools.Longer(passwdList, plaintextList);
//System.out.println("增加后的密钥数字串:" + passwdList);
//输出密文
StringBuilder ciphertext = new StringBuilder();
for (int i = 0; i < plaintextList.size(); i++) {
if ((plaintextList.get(i) + passwdList.get(i)) >= alphabet.length) {
plaintextList.set(i, (passwdList.get(i) + plaintextList.get(i) - alphabet.length));
} else {
plaintextList.set(i, (passwdList.get(i) + plaintextList.get(i)));
}
ciphertext.append(alphabet[plaintextList.get(i)]);
}
return ciphertext;
}
public static StringBuilder Decrypt(String[] originMessage) {
//解密
String passwd = originMessage[2];
char[] passwd1 = passwd.toCharArray();
ArrayList<Integer> passwdList = vTools.Transform(passwd1);
String ciphertext = originMessage[1];
char[] ciphertext1 = ciphertext.toCharArray();
ArrayList<Integer> ciphertextList = vTools.Transform(ciphertext1);
//System.out.println("密文转换为密文数字串为" + ciphertextList);
vTools.Longer(passwdList, ciphertextList);
//System.out.println("增加后的密钥数字串:" + passwdList);
//输出明文
StringBuilder plaintext = new StringBuilder();
for (int i = 0; i < ciphertextList.size(); i++) {
if ((ciphertextList.get(i) - passwdList.get(i)) < 0) {
ciphertextList.set(i, ciphertextList.get(i) - passwdList.get(i) + alphabet.length);
} else {
ciphertextList.set(i, ciphertextList.get(i) - passwdList.get(i));
}
plaintext.append(alphabet[ciphertextList.get(i)]);
}
return plaintext;
}
}

View File

@ -0,0 +1,23 @@
package com.mtz.qqbot.Tool;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import java.util.List;
import java.util.Map;
public class invalidMember {
public static void invalidCountList(Map<Long, Integer> groupMemberInvalidedCountList, GroupMessageEvent event) {
if (groupMemberInvalidedCountList.get(event.getSender().getId()) == null) {
groupMemberInvalidedCountList.put(event.getSender().getId(), 1);//初始化
} else {
int invalidCount = Integer.parseInt(String.valueOf(groupMemberInvalidedCountList.get(event.getSender().getId()))) + 1;
groupMemberInvalidedCountList.put(event.getSender().getId(), invalidCount);
}
}
public static void invalidMemberList(List<Long> groupInvalidMember, Map<Long, Integer> groupMemberInvalidedCountList, GroupMessageEvent event) {
if (groupMemberInvalidedCountList.get(event.getSender().getId()).equals(5)) {
groupInvalidMember.add(event.getSender().getId());
}
}
}

View File

@ -0,0 +1,15 @@
package com.mtz.qqbot.Tool;
public class isNumber {
public static boolean isNum(String str) {
if (str == null || str.isEmpty()) {
return false;
}
try {
Integer.parseInt(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
}

View File

@ -0,0 +1,41 @@
package com.mtz.qqbot.Tool;
import java.util.ArrayList;
import java.util.Scanner;
public class vTools {
//字符表
public static char[] alphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', '/', '.', '-', '_', '?', '=', '&', '%'};
public static ArrayList<Integer> Transform(char[] text) {
ArrayList<Integer> list = new ArrayList<>();
for (char c : text) {
for (int j = 0; j < alphabet.length; j++) {
if (c == alphabet[j]) {
list.add(j);
}
}
}
return list;
}
public static void Longer(ArrayList<Integer> passwdList, ArrayList<Integer> list) {
int i = 0;
while (passwdList.size() < list.size()) {
passwdList.add(passwdList.get(i));
i++;
}
}
public static int Input() {
//防止玩家输入其他字符的输入数字方法
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextInt()) {
return scanner.nextInt();
} else {
System.out.println("请输入数字!");
System.out.print("请输入:");
return Input();
}
}
}

View File

@ -0,0 +1,27 @@
itbaima:
robot:
username: 1368740141
login-type: qr_code
protocol: android_watch
password: mtzmtq2002
signer:
version: 8.9.63
url: http://localhost:8888
type: fuqiuluo
authorization-key: 114514
data:
contact-cache: false
work-dir: robot-data
cache-dir: cache
#spring:
# datasource:
# driverClassName: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/database
# username: root
# password: 123456
server:
port: 8080

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 754 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,195 @@
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="qq-bot.css">
</head>
<body id="bg">
<article id="mybody">
<div id="事先声明">
<img src="image/QQ图片20230508223654.png">
<p>
<b>此条目介绍的作品或其衍生作品中有至少一项尚未完结。</b><br>
</p>
</div>
<div id="艺术字">
<table>
<tr>
<td class="艺术字"><span>QQ</span>-Bot<span>使用说明</span></td>
</tr>
</table>
</div>
<div id="作品简介1">
<div class="大圆角标签1"></div>
<h2>&nbspQQ机器人是什么</h2>
<p>QQ机器人是通过开放的接口让开发者能够实现开发出交互形式丰富的机器人
以辅助实现频道/社群内的管理、消息互动,</a>
满足群主运营者多样化、个性化的运营需求,从而提高运营效率,同时为用户带来丰富的服务和便捷的体验。</P>
</div>
<div id="作品简介2">
<div class="大圆角标签2"></div>
<h2>&nbspQ2QQ机器人可以实现什么功能呢</h2>
<p>QQ机器人集便捷、高效、趣味、赋能于一身</p>
<p> 高效的社群管理功能(如:身份组分配、自动回复、签到打卡等)</p>
<p> 稳健的音频功能(如:听歌、听书、语音开黑、在线玩桌游等)</p>
<p> 有趣的游戏功能(如:猜灯谜、成语接龙、打年兽升级、攻城守家等)</P>
</div>
<div id="作品简介3">
<div class="大圆角标签3"></div>
<h2>&nbspQ3Mirai框架的QQ机器人区别于其他QQ机器人的亮点有哪些</h2>
<p>
Mirai框架发展时间长技术更成熟现有的更好的QQ机器人框架都是在Mirai基础上进行迭代升级的所以对QQ机器人的框架学习更有帮助</P>
</div>
<div id="作品简介4">
<div class="大圆角标签4"></div>
<h2>&nbspQ4QQ机器人能做什么</h2>
<p>社群管理-提效率:自动回复、自动分组、打卡等,提升管理效率</p>
<p>用户互动-促活跃成语接龙、猜灯谜、抽奖、RPG/SLG文字游戏等提升频道活跃</P>
</div>
<div id="作品简介5">
<div class="大圆角标签5"></div>
<h2>&nbspQ5QQ机器人的好处</h2>
<p>对于频道主、群主:帮助管理的工具,提升管理效率;同时提高群的活跃度</P>
</div>
<h1>项目效果演示:</h1>
<div class="集数按钮">#01</div>
<div class="集数按钮">#02</div>
<div class="集数按钮">#03</div>
<div class="集数按钮">#04</div>
<div class="集数按钮">#05</div>
<div class="集数按钮">#06</div>
<div class="集数按钮">#07</div>
<div class="集数按钮">#08</div>
<div class="各集内容">
<span>#01 骚扰机器人</span>
<div class="内容">
<img src="image/骚扰机器人.png">
<p>在群中发送“111”字样即可让bot“稍微的”理你一下</p>
</div>
</div>
<div class="各集内容">
<span>#02 群聊主动回复</span>
<div class="内容">
<img src="image/群聊回复1.png">
<img src="image/群聊回复2.png">
<p>在群聊中消息带上“呼叫管理”,管理员便可以在控制台进行回复</p>
</div>
</div>
<div class="各集内容">
<span>#03 临时会话回复</span>
<div class="内容">
<img src="image/临时会话1.png">
<img src="image/临时会话2.png">
<p>在群聊中对bot进行临时会话管理员便可在控制台进行回复</p>
</div>
</div>
<div class="各集内容">
<span>#04 好友消息回复</span>
<div class="内容">
<img src="image/好友发送消息.jpg">
<img src="image/好友发送消息2.png">
<p>bot的好友发起聊天后管理员便可以在控制台进行回复</p>
</div>
</div>
<div class="各集内容">
<span>#05 接收消息</span>
<div class="内容">
<img src="image/接收1.jpg">
<img src="image/接收2.jpg">
<img src="image/接收3.jpg">
<img src="image/接收4.png">
<p>在群聊中或者与机器人进行私聊,控制台便可以接收到信息</p>
</div>
</div>
<div class="各集内容">
<span>#06 钓鱼游戏</span>
<div class="内容">
<img src="image/钓鱼.png">
<p>在群聊中发送“钓鱼”字样,即可进行“有趣的”钓鱼游戏</p>
<p>“钓鱼虽好,可不要贪杆哦”</p>
</div>
</div>
<div class="各集内容">
<span>#07 禁言套餐</span>
<div class="内容">
<img src="image/原神1.png">
<img src="image/原神2.png">
<p>在群中发送消息带有“<span class="黑幕" title="你知道的太多了">原神</span>启动”“<span class="黑幕"
title="你知道的太多了">OP</span>”等违禁词即可喜提“60S”禁言+撤回大礼包
</p>
<p>偷偷告诉你分开输入的话笨蛋bot是检测不出来的</p>
</div>
</div>
<div class="各集内容">
<span>#08 文字冒险(待实现)</span>
<div class="内容">
<img src="image/文字游戏.png">
<p>在群聊中发送”txtgame“即可进行紧张刺激的文字冒险游戏</p>
<p></p>
</div>
</div>
<p>此外还可以在下表中查看群聊消息统计数据</p>
<div class="imgBox">
<a href="messagelist" title="后藤一里"><img src="image/200px-后藤独头贴.png">点我查看bot统计信息</a>
</div>
<br>
<br>
<br>
<div class="作品简介">
<div class="大圆角标签6"></div>
<h2>&nbsp后记</h2>
<p>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp我们项目组由衷的感谢Mirai框架与将Mirai框架集成到SpringBoot中的各位前辈正是他们的开源精神推动了整个社区的良性发展,</p>
<p>得以让我们能够站在巨人的肩膀头上实现我们自己的想法</p>
<p>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp同时感谢我的SpringBoot课的老师陈闯闯老师。如果没有老师带着我们入门就不会有如今的这个项目</p>
<p>&nbsp</p>
<p>Mirai项目地址<a href="https://github.com/mamoe/mirai">https://github.com/mamoe/mirai</a></p>
<p>基于Mirai核心封装的SpringBoot Starter<a href="https://github.com/itbaima-study/itbaima-robot-starter">https://github.com/itbaima-study/itbaima-robot-starter</a></p>
</div>
</article>
<script>
var contents = document.getElementsByClassName("各集内容");
contents[0].style.display = "block";
var active_index = 0;
function show(index) {
contents[active_index].style.display = "none";
contents[active_index = index].style.display = "block";
}
var buttons = document.getElementsByClassName("集数按钮");
for (let i = 0; i < buttons.length; i++) {
buttons[i].addEventListener("click", () => {
show(i);
});
}
</script>
</body>
</html>

View File

@ -0,0 +1,247 @@
body {
padding: 1rem 2rem 2rem;
width: 880px;
border-radius: 0.7em;
margin: 0 auto;
background-color: rgba(255, 255, 255, 0.9);
font-size: 14px;
color: #2c3e50;
}
.集数按钮 {
font-weight: 600;
color: #000;
background-color: #FFF000;
width: 43px;
border-radius: 10px;
text-align: center;
padding: 4px 6px;
display: inline-block;
cursor: pointer;
transition: 0.2s linear;
}
.集数按钮:hover {
opacity: 0.5;
}
.各集内容 {
padding: 14px;
display: none;
}
.各集内容 span {
font-size: 24px;
font-weight: bolder;
color: #000;
}
.各集内容 .内容 {
border-radius: 15px;
border: 2px solid #000;
padding: 6px 15px;
background-color: #FFF;
max-width: 580px;
}
.各集内容 img {
width: 100%;
height: auto;
}
.各集内容 p {
font-size: 16.8px;
line-height: 1.6;
}
.各集内容 .黑幕 {
background-color: #252525;
color: #252525;
transition: 0.13s linear;
font-size: 16.8px;
}
.各集内容 .黑幕:hover {
color: white;
}
#艺术字 {
margin-left: 105px;
}
#艺术字 .艺术字 {
width: 50%;
color: #36c0b9;
font-size: 30px;
font-weight: bolder;
text-align: center;
padding: 1em;
vertical-align: middle;
}
#艺术字 .艺术字 span {
font-size: 35px;
}
#bg {
background: url(image/background_picture.jpg) no-repeat;
background-attachment: fixed;
}
#mybody {
padding: 1rem 2rem 2rem;
width: 880px;
border-radius: 0.7em;
margin: 0 auto;
background-color: rgba(255, 255, 255, 0.9);
font-size: 14px;
color: #2c3e50;
}
article {
display: block;
unicode-bidi: isolate;
}
#事先声明 {
color: rgb(70, 70, 70);
font-size: small;
border: 1px solid rgba(128, 128, 128, 0.466);
border-left: 10px #1e90ff solid;
height: 50px;
}
div {
display: block;
unicode-bidi: isolate;
}
h2 {
display: block;
font-size: 1.5em;
margin-block-start: 0.83em;
margin-block-end: 0.83em;
margin-inline-start: 0px;
margin-inline-end: 0px;
font-weight: bold;
unicode-bidi: isolate;
}
p {
display: block;
margin-block-start: 1em;
margin-block-end: 1em;
margin-inline-start: 0px;
margin-inline-end: 0px;
unicode-bidi: isolate;
}
a {
text-decoration: none;
color: #3f51b5;
}
a:active, a:visited:active {
color: orange;
}
a:visited {
color: #0b0080;
}
#事先声明 {
color: rgb(70, 70, 70);
font-size: small;
border: 1px solid rgba(128, 128, 128, 0.466);
border-left: 10px #1e90ff solid;
height: 50px;
}
#事先声明 p {
position: relative;
top: -50px;
left: 70px;
}
#事先声明 img {
position: relative;
top: 4px;
left: 4px;
}
.大圆角标签1 {
width: 5px;
height: 30px;
background: #f62020;
border-radius: 1em;
float: left;
position: relative;
top: 0px;
}
.大圆角标签2 {
width: 5px;
height: 30px;
background: #f8c708;
border-radius: 1em;
float: left;
position: relative;
top: 0px;
}
.大圆角标签3 {
width: 5px;
height: 30px;
background: #3f4fd9;
border-radius: 1em;
float: left;
position: relative;
top: 0px;
}
.大圆角标签4 {
width: 5px;
height: 30px;
background: #8ed495;
border-radius: 1em;
float: left;
position: relative;
top: 0px;
}
.大圆角标签5 {
width: 5px;
height: 30px;
background: #be8eb0;
border-radius: 1em;
float: left;
position: relative;
top: 0px;
}
.大圆角标签6 {
width: 5px;
height: 30px;
background: #44c7e8;
border-radius: 1em;
float: left;
position: relative;
top: 0px;
}
.imgBox {
display: inline-block;
width: 113px;
height: 122px;
text-align: center;
transition: 0.25s;
}
.imgBox:hover {
opacity: 0.70;
}
.imgBox img {
width: 100px;
height: 100px;
}

View File

@ -0,0 +1,13 @@
package com.mtz.qqbot;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class QqBotApplicationTests {
@Test
void contextLoads() {
}
}