Skip to content

Commit fc91704

Browse files
committed
optimize tips, close #29
1 parent 230cd4d commit fc91704

7 files changed

Lines changed: 146 additions & 133 deletions

File tree

build.gradle.kts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ group = "KonnyakuCamp"
99
version = "0.4.7"
1010

1111
repositories {
12-
mavenLocal()
13-
jcenter()
1412
mavenCentral()
13+
mavenLocal()
1514
gradlePluginPortal()
1615
}
1716

@@ -46,4 +45,4 @@ tasks.test {
4645
testLogging {
4746
events("passed", "skipped", "failed")
4847
}
49-
}
48+
}

src/main/kotlin/me/stageguard/sctimetable/service/messageRoute/changePassword.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import me.stageguard.sctimetable.utils.exception
1919
import me.stageguard.sctimetable.utils.finish
2020
import me.stageguard.sctimetable.utils.interactiveConversation
2121
import net.mamoe.mirai.event.events.FriendMessageEvent
22-
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
2322
import kotlin.contracts.ExperimentalContracts
2423

2524
@OptIn(ExperimentalContracts::class)
@@ -39,6 +38,6 @@ suspend fun FriendMessageEvent.changePassword(coroutineScope: CoroutineScope) {
3938
}.exception {
4039
subject.sendMessage("长时间未输入新的密码,请重新发送\"修改密码\"")
4140
}
42-
} else subject.sendMessage("你还没有登录超级课表,无法修改密码")
41+
} else subject.sendMessage("你还没有登录超级课表,无法修改密码")
4342
}
44-
}
43+
}

src/main/kotlin/me/stageguard/sctimetable/service/messageRoute/changeTimetable.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ private val TIME_PERIOD_EXPRESSION = Pattern.compile("(\\d){1,2}[::](\\d){1,2}
2828
suspend fun FriendMessageEvent.changeTimetable(coroutineScope: CoroutineScope) {
2929
Database.suspendQuery {
3030
val thisUser = User.find { Users.qq eq subject.id }
31+
if (thisUser.empty()) {
32+
subject.sendMessage("你还没有登录超级课表,无法修改时间表,请先登录超级课表。")
33+
return@suspendQuery
34+
}
35+
3136
val schoolTimetable =
3237
SchoolTimetable.find { SchoolTimetables.schoolId eq thisUser.first().schoolId }.first()
3338
interactiveConversation(coroutineScope, eachTimeLimit = 30000L, eachTryLimit = 5) {
@@ -93,4 +98,4 @@ suspend fun FriendMessageEvent.changeTimetable(coroutineScope: CoroutineScope) {
9398
}
9499
}
95100
}
96-
}
101+
}

src/main/kotlin/me/stageguard/sctimetable/service/messageRoute/help.kt

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,25 @@ import net.mamoe.mirai.event.events.FriendMessageEvent
1212

1313
suspend fun FriendMessageEvent.help() {
1414
subject.sendMessage(
15-
"""
16-
欢迎使用 超级课表课程提醒QQ机器人。
17-
它可以在你下一节课上课前提醒你这节课的信息,避免你错过课程。
18-
指令:
19-
"登录超级课表" - 使用密码登录你的超课表账户
20-
"查看时间表" - 查看本校的作息时间表
21-
"修改时间表" - 修改本校的作息时间表
22-
"同步课程" - 手动从超级课表同步你的课程
23-
"今(明)日课程" - 查看你今(明)天的所有课程信息
24-
"周X课程" - 查看你周X的所有课程信息
25-
"怎么用/帮助" - 显示这条信息
26-
"修改密码" - 修改记录在机器人数据库中的密码
27-
"删除用户" - 删除你的记录在机器人数据库中的信息,并停止课程提醒服务。
28-
"修改提前提醒时间" - 修改上课提前多长时间提醒
29-
"状态" - 查看超级课表课程提醒QQ机器人的运行情况
30-
31-
注意:当前处于初代测试阶段。
32-
""".trimIndent()
15+
"""欢迎使用 超级课表课程提醒QQ机器人。
16+
它可以在你下一节课上课前提醒你这节课的信息,避免你错过课程。
17+
指令:
18+
"登录超级课表" - 使用密码登录你的超课表账户
19+
"查看时间表" - 查看本校的作息时间表
20+
"修改时间表" - 修改本校的作息时间表
21+
"同步课程" - 手动从超级课表同步你的课程
22+
"今(明)日课程" - 查看你今(明)天的所有课程信息
23+
"周X课程" - 查看你周X的所有课程信息
24+
"怎么用/帮助" - 显示这条信息
25+
"修改密码" - 修改记录在机器人数据库中的密码
26+
"删除用户" - 删除你的记录在机器人数据库中的信息,并停止课程提醒服务
27+
"修改提前提醒时间" - 修改上课提前多长时间提醒
28+
"状态" - 查看超级课表课程提醒QQ机器人的运行情况
29+
使用指南:
30+
1. 首先需要发送"登录超级课表"来登录你的账号,登陆成功后会自动同步你的课程,然后可以发送"今日课程"来确认是否成功导入。
31+
2. 发送查看时间表来查看学校作息时间表,若时间表有误,可以发送"修改时间表"来重新设置作息时间表。
32+
3. 若您的课表有变更,请先在超级课表 App 中从教务系统更新课表,再在 Bot 中发送"同步课程"来同步你的课表。
33+
34+
注意:当前处于初代测试阶段。""".trimIndent()
3335
)
34-
}
36+
}

src/main/kotlin/me/stageguard/sctimetable/service/messageRoute/queryCourse.kt

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -63,22 +63,25 @@ suspend fun FriendMessageEvent.queryCourse(matchResult: MatchResult) {
6363

6464
Database.suspendQuery {
6565
val user = User.find { Users.qq eq subject.id }
66-
if (!user.empty()) {
67-
val schoolTimetable = ScheduleListenerService.getSchoolTimetable(user.first().schoolId)
66+
if (user.empty()) {
67+
subject.sendMessage("你还没有登录超级课表,无法查看${matchResult.groupValues[1]}课程,请先登录超级课表。")
68+
return@suspendQuery
69+
}
70+
71+
val schoolTimetable = ScheduleListenerService.getSchoolTimetable(user.first().schoolId)
6872

69-
val courses = queryFromDatabase(subject.id, user.first().schoolId, whichDay)
70-
var index = 1
71-
subject.sendMessage(if (courses.isEmpty()) "${matchResult.groupValues[1]}没有课程。" else courses.joinToString("\n") {
72-
"${index++}. " + it.courseName + "(${
73-
schoolTimetable[it.startSection - 1].first.let { stamp ->
74-
"${(stamp - (stamp % 60)) / 60}:${(stamp % 60).let { min -> if (min < 10) ("0$min") else min }}"
75-
}
76-
}${
77-
schoolTimetable[it.endSection - 1].second.let { stamp ->
78-
"${(stamp - (stamp % 60)) / 60}:${(stamp % 60).let { min -> if (min < 10) ("0$min") else min }}"
79-
}
80-
})在${it.locale}"
81-
})
82-
} else subject.sendMessage("你还没有登录超级课表,无法查看${matchResult.groupValues[1]}课程")
73+
val courses = queryFromDatabase(subject.id, user.first().schoolId, whichDay)
74+
var index = 1
75+
subject.sendMessage(if (courses.isEmpty()) "${matchResult.groupValues[1]}没有课程。" else courses.joinToString("\n") {
76+
"${index++}. " + it.courseName + "(${
77+
schoolTimetable[it.startSection - 1].first.let { stamp ->
78+
"${(stamp - (stamp % 60)) / 60}:${(stamp % 60).let { min -> if (min < 10) ("0$min") else min }}"
79+
}
80+
}${
81+
schoolTimetable[it.endSection - 1].second.let { stamp ->
82+
"${(stamp - (stamp % 60)) / 60}:${(stamp % 60).let { min -> if (min < 10) ("0$min") else min }}"
83+
}
84+
})在${it.locale}"
85+
})
8386
}
84-
}
87+
}

src/main/kotlin/me/stageguard/sctimetable/service/messageRoute/queryTimetable.kt

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -29,53 +29,55 @@ import kotlin.contracts.ExperimentalContracts
2929
suspend fun FriendMessageEvent.queryTimetable(coroutineScope: CoroutineScope) {
3030
Database.suspendQuery {
3131
val user = User.find { Users.qq eq subject.id }
32-
if (!user.empty()) {
33-
val schoolTimetable = SchoolTimetable.find {
34-
(SchoolTimetables.schoolId eq user.first().schoolId) and
35-
(SchoolTimetables.beginYear eq TimeProviderService.currentSemesterBeginYear) and
36-
(SchoolTimetables.semester eq TimeProviderService.currentSemester)
37-
}.firstOrNull()
38-
if (schoolTimetable != null) {
39-
var index = 1
40-
subject.sendMessage(
41-
"${schoolTimetable.schoolName}\n" +
42-
"${TimeProviderService.currentSemesterBeginYear} 学年第 ${TimeProviderService.currentSemester} 学期。\n" +
43-
"当前是第 ${TimeProviderService.currentWeekPeriod[schoolTimetable.schoolId]} 周。\n" +
44-
"时间表:\n" +
45-
"${
46-
schoolTimetable.scheduledTimeList.split("|").joinToString("\n") {
47-
"${index++}. ${it.replace("-", "")}"
48-
}
49-
}\n" +
50-
"如果以上数据有任何问题,请发送\"修改时间表\"修改。"
51-
)
52-
} else interactiveConversation(coroutineScope) {
53-
send(
54-
"""
32+
if (user.empty()) {
33+
subject.sendMessage("你还没有登录超级课表,无法同步时间表,请先登录超级课表。")
34+
return@suspendQuery
35+
}
36+
37+
val schoolTimetable = SchoolTimetable.find {
38+
(SchoolTimetables.schoolId eq user.first().schoolId) and
39+
(SchoolTimetables.beginYear eq TimeProviderService.currentSemesterBeginYear) and
40+
(SchoolTimetables.semester eq TimeProviderService.currentSemester)
41+
}.firstOrNull()
42+
if (schoolTimetable != null) {
43+
var index = 1
44+
subject.sendMessage(
45+
"${schoolTimetable.schoolName}\n" +
46+
"${TimeProviderService.currentSemesterBeginYear} 学年第 ${TimeProviderService.currentSemester} 学期。\n" +
47+
"当前是第 ${TimeProviderService.currentWeekPeriod[schoolTimetable.schoolId]} 周。\n" +
48+
"时间表:\n" +
49+
"${
50+
schoolTimetable.scheduledTimeList.split("|").joinToString("\n") {
51+
"${index++}. ${it.replace("-", "")}"
52+
}
53+
}\n" +
54+
"如果以上数据有任何问题,请发送\"修改时间表\"修改。"
55+
)
56+
} else interactiveConversation(coroutineScope) {
57+
send(
58+
"""
5559
未找到 ${TimeProviderService.currentSemesterBeginYear} 年第 ${TimeProviderService.currentSemester} 学期的时间表。
5660
要添加时间表吗?
5761
发送"沿用"将上个学期/学年的时间表沿用至当前学期。
5862
发送"同步"将从服务器重新同步时间表信息。
5963
否则取消操作。
6064
""".trimIndent()
61-
)
62-
select(timeoutLimit = 10000L) {
63-
"沿用" { collect("syncType", 1) }
64-
"同步" { collect("syncType", 2) }
65-
}
66-
}.finish {
67-
when (it["syncType"].cast<Int>()) {
68-
1 -> RequestHandlerService.sendRequest(InheritTimetableFromLastSemester(sender.id))
69-
2 -> RequestHandlerService.sendRequest(
70-
SyncSchoolTimetable(
71-
sender.id,
72-
forceUpdate = true,
73-
alsoSyncCourses = true
74-
)
65+
)
66+
select(timeoutLimit = 10000L) {
67+
"沿用" { collect("syncType", 1) }
68+
"同步" { collect("syncType", 2) }
69+
}
70+
}.finish {
71+
when (it["syncType"].cast<Int>()) {
72+
1 -> RequestHandlerService.sendRequest(InheritTimetableFromLastSemester(sender.id))
73+
2 -> RequestHandlerService.sendRequest(
74+
SyncSchoolTimetable(
75+
sender.id,
76+
forceUpdate = true,
77+
alsoSyncCourses = true
7578
)
76-
}
79+
)
7780
}
78-
79-
} else subject.sendMessage("你还没有登录超级课表,无法同步时间表")
81+
}
8082
}
81-
}
83+
}

src/main/kotlin/me/stageguard/sctimetable/service/messageRoute/syncCourse.kt

Lines changed: 52 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -28,71 +28,74 @@ import kotlin.contracts.ExperimentalContracts
2828
suspend fun FriendMessageEvent.syncCourse(coroutineScope: CoroutineScope) {
2929
Database.suspendQuery {
3030
val user = User.find { Users.qq eq subject.id }
31-
if (!user.empty()) {
32-
val courses = Courses(subject.id)
33-
SchemaUtils.create(courses)
34-
val currentSemesterCourses = courses.select {
35-
(courses.beginYear eq TimeProviderService.currentSemesterBeginYear) and
36-
(courses.semester eq TimeProviderService.currentSemester)
37-
}
38-
if (currentSemesterCourses.empty()) {
39-
interactiveConversation(coroutineScope, eachTimeLimit = 10000L) {
40-
send(
41-
"""
31+
if (user.empty()) {
32+
subject.sendMessage("你还没有登录超级课表,无法同步课程,请先登录超级课表。")
33+
return@suspendQuery
34+
}
35+
36+
val courses = Courses(subject.id)
37+
SchemaUtils.create(courses)
38+
val currentSemesterCourses = courses.select {
39+
(courses.beginYear eq TimeProviderService.currentSemesterBeginYear) and
40+
(courses.semester eq TimeProviderService.currentSemester)
41+
}
42+
if (currentSemesterCourses.empty()) {
43+
interactiveConversation(coroutineScope, eachTimeLimit = 10000L) {
44+
send(
45+
"""
4246
未找到 ${TimeProviderService.currentSemesterBeginYear} 学年第 ${TimeProviderService.currentSemester} 学期的课表信息!
4347
是否要从超级课表同步?
4448
发送 "确认" 进行同步。
4549
请注意:请务必先打开超级课表App导入当前学期的课程,机器人才能从超级课表同步!
4650
""".trimIndent()
51+
)
52+
select {
53+
"确认" { collect("sync", true) }
54+
default { collect("sync", false) }
55+
}
56+
}.finish {
57+
if (it["sync"].cast()) RequestHandlerService.sendRequest(
58+
SyncCourse(
59+
subject.id
4760
)
48-
select {
49-
"确认" { collect("sync", true) }
50-
default { collect("sync", false) }
51-
}
52-
}.finish {
53-
if (it["sync"].cast()) RequestHandlerService.sendRequest(
54-
SyncCourse(
55-
subject.id
56-
)
57-
)
58-
}.exception {
59-
if (it is QuitConversationExceptions.TimeoutException) {
60-
BotEventRouteService.sendMessageNonBlock(subject.id, "取消操作。")
61-
}
61+
)
62+
}.exception {
63+
if (it is QuitConversationExceptions.TimeoutException) {
64+
BotEventRouteService.sendMessageNonBlock(subject.id, "取消操作。")
6265
}
63-
} else {
64-
interactiveConversation(coroutineScope, eachTimeLimit = 10000L) {
65-
send(
66-
"""
66+
}
67+
} else {
68+
interactiveConversation(coroutineScope, eachTimeLimit = 10000L) {
69+
send(
70+
"""
6771
当前记录的课程有:
6872
${
69-
Database.query {
70-
currentSemesterCourses.joinToString("\n") {
71-
" ${it[courses.courseName]}"
72-
}
73+
Database.query {
74+
currentSemesterCourses.joinToString("\n") {
75+
" ${it[courses.courseName]}"
7376
}
7477
}
78+
}
7579
是否要继续从超级课表同步?
7680
发送 "确认" 进行同步。
7781
请注意:继续同步会覆盖现在的所有课程信息。
7882
""".trimIndent()
83+
)
84+
select {
85+
"确认" { collect("sync", true) }
86+
default { collect("sync", false) }
87+
}
88+
}.finish {
89+
if (it["sync"].cast()) RequestHandlerService.sendRequest(
90+
SyncCourse(
91+
subject.id
7992
)
80-
select {
81-
"确认" { collect("sync", true) }
82-
default { collect("sync", false) }
83-
}
84-
}.finish {
85-
if (it["sync"].cast()) RequestHandlerService.sendRequest(
86-
SyncCourse(
87-
subject.id
88-
)
89-
)
90-
}.exception {
91-
if (it is QuitConversationExceptions.TimeoutException) {
92-
BotEventRouteService.sendMessageNonBlock(subject.id, "取消操作。")
93-
}
93+
)
94+
}.exception {
95+
if (it is QuitConversationExceptions.TimeoutException) {
96+
BotEventRouteService.sendMessageNonBlock(subject.id, "取消操作。")
9497
}
9598
}
96-
} else subject.sendMessage("你还没有登录超级课表,无法同步课程")
99+
}
97100
}
98-
}
101+
}

0 commit comments

Comments
 (0)