diff --git a/bot.py b/bot.py index f35a0e8..c87bde5 100644 --- a/bot.py +++ b/bot.py @@ -28,128 +28,172 @@ class Kuser: self.question = question self.api = KCOJ(URL) + # 新使用者要登入 def new_user(self): self.help() self.press_username() + # 輸入學號 def press_username(self): - self.status = '輸入學號' self.question = '題外' + self.status = '輸入學號' bot.sendMessage(self.userid, "請輸入您的學號:", reply_markup=ReplyKeyboardRemove()) + # 輸入密碼 def press_password(self, text): - self.status = '輸入密碼' self.question = '題外' + self.status = '輸入密碼' self.username = text bot.sendMessage(self.userid, "輸入完可刪除訊息以策安全!\n" - "請輸入您的密碼:", reply_markup=ReplyKeyboardRemove()) + "請輸入您的密碼:", + reply_markup=ReplyKeyboardRemove()) + # 輸入舊密碼 def press_oldpassword(self): - self.status = '舊的密碼' self.question = '題外' + self.status = '舊的密碼' bot.sendMessage(self.userid, "請輸入要原本的舊密碼:", reply_markup=ReplyKeyboardMarkup(keyboard=[ ["首頁🏠"] ], resize_keyboard=True)) + # 輸入新密碼 def press_newpassword(self, text): - if text != self.password: - self.status = '正常使用' - self.question = '題外' - bot.sendMessage(self.userid, "密碼錯誤!", - reply_markup=ReplyKeyboardMarkup(keyboard=[ - ["首頁🏠"] - ], resize_keyboard=True)) - else: + self.question = '題外' + # 判斷舊密碼是否輸入正確 + if text == self.password: + # 正確舊密碼 self.status = '修改密碼' - self.question = '題外' bot.sendMessage(self.userid, "使用此功能請務必小心!\n" "請輸入要設定的新密碼:", reply_markup=ReplyKeyboardMarkup(keyboard=[ ["首頁🏠"] ], resize_keyboard=True)) - + else: + # 錯誤舊密碼 + self.status = '正常使用' + bot.sendMessage(self.userid, "密碼錯誤!", + reply_markup=ReplyKeyboardMarkup(keyboard=[ + ["首頁🏠"] + ], resize_keyboard=True)) + + # 開始修改密碼 def change_password(self, text): - self.status = '正常使用' self.question = '題外' + self.status = '正常使用' self.password = text bot.sendMessage(self.userid, - "修改成功!" if self.api.change_password(self.password) == True else "修改失敗。", + "修改成功!" if self.api.change_password(self.password) else "修改失敗。", reply_markup=ReplyKeyboardMarkup(keyboard=[ ["首頁🏠"] ], resize_keyboard=True)) + # 執行登入 def login(self, text): - self.status = '正常使用' self.question = '題外' + self.status = '正常使用' self.password = text bot.sendMessage(self.userid, "登入中...", reply_markup=ReplyKeyboardRemove()) - if self.check_online(self.userid) == True: + if self.check_online(self.userid): self.show_homepage(self.userid) + # 登入失敗 def login_failed(self, chat_id, message_id): - self.status = '正常使用' self.question = '題外' + self.status = '正常使用' + # 判斷使用者從哪操作 if chat_id != self.userid: + # 從群組操作 bot.sendMessage(chat_id, "登入失敗,請先私訊我重新登入 KCOJ", reply_to_message_id=message_id) - bot.sendMessage(self.userid, "哇...登入失敗,讓我們重新開始", reply_markup=ReplyKeyboardRemove()) + else: + # 從私訊操作 + bot.sendMessage(self.userid, "哇...登入失敗,讓我們重新開始", reply_markup=ReplyKeyboardRemove()) self.press_username() + # 網站連接失敗 def connect_failed(self, chat_id, message_id): - self.status = '正常使用' self.question = '題外' + self.status = '正常使用' + # 群組操作 if chat_id != self.userid: bot.sendMessage(chat_id, "KCOJ 離線中!請稍後再試", reply_to_message_id=message_id) + # 私訊操作 else: bot.sendMessage(self.userid, "KCOJ 離線中!請稍後再試", reply_markup=ReplyKeyboardMarkup(keyboard=[ ["首頁🏠", "幫助📚"] ], resize_keyboard=True)) + # 確認登入是否正常 def check_online(self, chat_id, message_id=''): result = self.api.check_online() + # 判斷是否可連接上 if result == None: + # 連接失敗 self.connect_failed(chat_id, message_id) return False else: + # 連接成功 + # 判斷是否登入 if result == False: + # 沒有登入的話再嘗試重新登入一次 self.api.login(self.username, self.password, 2) result = self.api.check_online() - if result == False: - self.login_failed(chat_id, message_id) - elif result == None: + # 再次確認是否登入&連接 + if result == None: + # 連接失敗 self.connect_failed(chat_id, message_id) - return result == True + elif result == False: + # 登入失敗 + self.login_failed(chat_id, message_id) + # 回傳登入狀態 + return result + # 登出 def logout(self): - self.status = '正常使用' self.question = '題外' + self.status = '正常使用' bot.sendMessage(self.userid, "您現在已經是登出的狀態。", reply_markup=ReplyKeyboardRemove()) self.press_username() + # 秀出主畫面 def show_homepage(self, chat_id): - self.status = '正常使用' self.question = '題外' + self.status = '正常使用' + # 題目列表字典 q_dict = self.api.list_questions() + # 題目列表字串 q_str = '' + # 將字典內容根據格式附加到字串上 for key in q_dict.keys(): if q_dict[key][1] == '期限未到': q_str += "📗" + key + " (DL: " + q_dict[key][0] + ")\n [[" + q_dict[key][3] + "]] [[" + q_dict[key][2] + "]]" q_str += "⚠️" if q_dict[key][2] == '未繳' else "✅" q_str += " /question_" + key + "\n\n" + # 顯示主頁面 bot.sendMessage(chat_id, - "💁 " + self.username + " " + NAME + "\n" + # 畫面格式 + "💁 {NAME} {BOT_NAME}\n" "➖➖➖➖➖\n" - "📝可繳交的作業\n\n" + q_str + \ - "➖➖➖➖➖\n" + choice(promote.sentences), + "📝可繳交的作業\n" + "\n" + "{Q_STR}" + "➖➖➖➖➖\n" + "{PROMOTE}" + # 填入資訊 + "".format(NAME=self.username, BOT_NAME=NAME, Q_STR=q_str, PROMOTE=choice(promote.sentences)), parse_mode='HTML', - reply_markup=ReplyKeyboardMarkup(keyboard=[ - ["題庫📝"], - ["登出🚪", "改密碼💱", "幫助📚"] - ], resize_keyboard=True) if chat_id == self.userid else ReplyKeyboardRemove(), + reply_markup= + # 群組內不顯示按鈕 + ReplyKeyboardRemove() if chat_id != self.userid else + # 私訊內顯示按鈕 + ReplyKeyboardMarkup(keyboard=[ + ["題庫📝"], + ["登出🚪", "改密碼💱", "幫助📚"] + ], resize_keyboard=True), disable_web_page_preview=False) def list_questions(self, chat_id):