Skip to content

Commit 5072893

Browse files
committed
allow sync courses by users himself
1 parent 51eeef6 commit 5072893

1 file changed

Lines changed: 56 additions & 4 deletions

File tree

src/main/kotlin/stageguard/sctimetable/service/BotEventRouteService.kt

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,15 @@ import stageguard.sctimetable.PluginData
1818
import stageguard.sctimetable.PluginMain
1919
import stageguard.sctimetable.api.edu_system.`super`.LoginInfoData
2020
import stageguard.sctimetable.database.Database
21-
import stageguard.sctimetable.database.model.SchoolTimetable
22-
import stageguard.sctimetable.database.model.SchoolTimetables
23-
import stageguard.sctimetable.database.model.User
24-
import stageguard.sctimetable.database.model.Users
2521
import java.lang.management.ManagementFactory
2622
import com.sun.management.OperatingSystemMXBean
2723
import net.mamoe.mirai.event.events.*
2824
import net.mamoe.mirai.message.data.*
2925
import net.mamoe.mirai.utils.MiraiExperimentalApi
26+
import org.jetbrains.exposed.sql.SchemaUtils
3027
import org.jetbrains.exposed.sql.and
28+
import org.jetbrains.exposed.sql.select
29+
import stageguard.sctimetable.database.model.*
3130
import stageguard.sctimetable.utils.*
3231
import java.util.regex.Pattern
3332
import kotlin.contracts.ExperimentalContracts
@@ -114,6 +113,59 @@ object BotEventRouteService : AbstractPluginManagedService() {
114113
is QuitConversationExceptions.AdvancedQuitException -> subject.sendMessage("取消修改时间表。")
115114
} }
116115
} }
116+
startsWith("同步课程") { Database.suspendQuery {
117+
val user = User.find { Users.qq eq subject.id }
118+
if(!user.empty()) {
119+
val courses = Courses(subject.id)
120+
SchemaUtils.create(courses)
121+
val currentSemesterCourses = courses.select {
122+
(courses.beginYear eq TimeProviderService.currentSemesterBeginYear) and
123+
(courses.semester eq TimeProviderService.currentSemester)
124+
}
125+
if(currentSemesterCourses.empty()) {
126+
interactiveConversation(this@BotEventRouteService, eachTimeLimit = 10000L) {
127+
send("""
128+
未找到 ${TimeProviderService.currentSemesterBeginYear} 学年第 ${TimeProviderService.currentSemester} 学期的课表信息!
129+
是否要从超级课表同步?
130+
发送 "确认" 进行同步。
131+
请注意:请务必先打开超级课表App导入当前学期的课程,机器人才能从超级课表同步!
132+
""".trimIndent())
133+
select {
134+
"确认" { collect("sync", true) }
135+
default { collect("sync", false) }
136+
}
137+
}.finish {
138+
if(it["sync"].cast()) RequestHandlerService.sendRequest(Request.SyncCourseRequest(subject.id))
139+
}.exception {
140+
if(it is QuitConversationExceptions.TimeoutException) {
141+
sendMessageNonBlock(subject.id, "取消操作。")
142+
}
143+
}
144+
} else {
145+
interactiveConversation(this@BotEventRouteService, eachTimeLimit = 10000L) {
146+
send("""
147+
当前记录的课程有:
148+
${Database.query { currentSemesterCourses.joinToString("\n") {
149+
" ${it[courses.courseName]}"
150+
} }}
151+
是否要继续从超级课表同步?
152+
发送 "确认" 进行同步。
153+
请注意:继续同步会覆盖现在的所有课程信息。
154+
""".trimIndent())
155+
select {
156+
"确认" { collect("sync", true) }
157+
default { collect("sync", false) }
158+
}
159+
}.finish {
160+
if(it["sync"].cast()) RequestHandlerService.sendRequest(Request.SyncCourseRequest(subject.id))
161+
}.exception {
162+
if(it is QuitConversationExceptions.TimeoutException) {
163+
sendMessageNonBlock(subject.id, "取消操作。")
164+
}
165+
}
166+
}
167+
} else subject.sendMessage("你还没有登录超级课表,无法同步课程")
168+
} }
117169
startsWith("查看时间表") { Database.suspendQuery {
118170
val user = User.find { Users.qq eq subject.id }
119171
if(!user.empty()) {

0 commit comments

Comments
 (0)