@@ -18,16 +18,15 @@ import stageguard.sctimetable.PluginData
1818import stageguard.sctimetable.PluginMain
1919import stageguard.sctimetable.api.edu_system.`super`.LoginInfoData
2020import 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
2521import java.lang.management.ManagementFactory
2622import com.sun.management.OperatingSystemMXBean
2723import net.mamoe.mirai.event.events.*
2824import net.mamoe.mirai.message.data.*
2925import net.mamoe.mirai.utils.MiraiExperimentalApi
26+ import org.jetbrains.exposed.sql.SchemaUtils
3027import org.jetbrains.exposed.sql.and
28+ import org.jetbrains.exposed.sql.select
29+ import stageguard.sctimetable.database.model.*
3130import stageguard.sctimetable.utils.*
3231import java.util.regex.Pattern
3332import 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