diff --git a/bot.py b/bot.py
index 90d170d..ddb1804 100644
--- a/bot.py
+++ b/bot.py
@@ -1,25 +1,23 @@
#! /usr/bin/env python3
-# necessary modules
+# modules
import os
import time
import json
-import requests
+from pprint import pprint
import telepot
from telepot.loop import MessageLoop
-from pprint import pprint
-# kCOJ API
-import access
-from interface import Kuser, bot
-# configurations
-import config
+# config
+from config import NAME, TOKEN, ADMIN
+from interface import Kuser
+bot = telepot.Bot(TOKEN)
users = {}
def on_chat(msg):
content_type, chat_type, chat_id = telepot.glance(msg)
from_id = msg['from']['id']
-
+
# debug message
pprint(msg)
print('content_type:', content_type)
@@ -42,10 +40,10 @@ def on_chat(msg):
# pre-treat the command
command = [msg['text']]
if msg['text'].startswith('/'):
- command = msg['text'].replace(config.NAME, '').replace('_', ' ').lower().split(' ')
+ command = msg['text'].replace(NAME, '').replace('_', ' ').lower().split(' ')
# restart this bot
- if command[0] == '/restart' and str(from_id) in config.ADMIN:
+ if command[0] == '/restart' and str(from_id) in ADMIN:
bot.sendMessage(chat_id, "即將更新並重新啟動")
print("Restarting...")
backup_db()
@@ -61,7 +59,7 @@ def on_chat(msg):
# help message
elif command[0] == '/help' or command[0] == '幫助📚':
if chat_type == 'private':
- user.help_you()
+ user.help()
# first-time user
elif user._status == '第一次用':
@@ -76,19 +74,19 @@ def on_chat(msg):
# login
elif user._status == '輸入密碼':
if chat_type == 'private':
- user.login_kcoj(msg['text'])
+ user.login(msg['text'])
# homepage
elif command[0] == '/start' or command[0] == '首頁🏠':
if user.check_online(chat_id, msg['message_id']) == True:
- user.display_main(chat_id)
+ user.show_homepage(chat_id)
elif command[0] == '/question' or command[0] == '題庫📝' or command[0] == '更新🔃':
if user.check_online(chat_id, msg['message_id']) == True:
if len(command) > 1:
- user.display_question(command[1], chat_id)
+ user.show_question(command[1], chat_id)
else:
- user.display_questions(chat_id)
+ user.list_questions(chat_id)
elif chat_type == 'private':
if command[0] == '/password' or command[0] == '改密碼💱':
@@ -98,7 +96,7 @@ def on_chat(msg):
elif command[0] == '/logout' or command[0] == '登出🚪':
user = Kuser(from_id)
users[str(from_id)] = user
- user.logout_system()
+ user.logout()
elif (command[0] == '/delete' or command[0] == '刪除作業⚔️') and user._question != '題外':
if user.check_online(chat_id, msg['message_id']) == True:
@@ -118,7 +116,7 @@ def on_chat(msg):
elif command[0] == '回題目📜' and user._question != '題外':
if user.check_online(chat_id, msg['message_id']) == True:
- user.display_question(user._question, chat_id)
+ user.show_question(user._question, chat_id)
elif user._status == '舊的密碼':
if user.check_online(chat_id, msg['message_id']) == True:
@@ -140,7 +138,7 @@ def on_chat(msg):
if user._status == '上傳答案' or user._status == '查看題目':
if user.check_online(chat_id, msg['message_id']) == True:
if msg['document']['file_size'] > 167770000:
- user.fail_send()
+ user.send_failed()
else:
user.send_answer('', msg['document']['file_id'])
@@ -175,7 +173,7 @@ print("Started! Service is available.")
while True:
time.sleep(60)
- # keep alive
+ # keep bot alive
bot.getMe()
# backup
diff --git a/interface.py b/interface.py
index 4d612f5..df72675 100644
--- a/interface.py
+++ b/interface.py
@@ -1,18 +1,17 @@
#! /usr/bin/env python3
-# necessary modules
+# modules
import os
+from random import choice
import telepot
from telepot.namedtuple import ReplyKeyboardMarkup, ReplyKeyboardRemove
-from random import choice
-# kCOJ API
-import access
-# configurations
-import config
+# config
+from config import NAME, URL, TOKEN
+from kcoj import KCOJ
import promote
import external
-bot = telepot.Bot(config.TOKEN)
+bot = telepot.Bot(TOKEN)
class Kuser:
def __init__(self, userid, username='', password='', status='第一次用', question='題外'):
@@ -21,10 +20,10 @@ class Kuser:
self._password = password
self._status = status
self._question = question
- self._api = access.KuserAPI()
+ self._api = KCOJ(URL)
def new_user(self):
- self.help_you()
+ self.help()
self.press_username()
def press_username(self):
@@ -73,29 +72,29 @@ class Kuser:
["首頁🏠"]
], resize_keyboard=True))
- def login_kcoj(self, text):
+ def login(self, text):
self._status = '正常使用'
self._question = '題外'
self._password = text
bot.sendMessage(self._userid, "登入中...", reply_markup=ReplyKeyboardRemove())
if self.check_online(self._userid) == True:
- self.display_main(self._userid)
+ self.show_homepage(self._userid)
- def fail_login(self, chat_id, message_id):
+ def login_failed(self, chat_id, message_id):
self._status = '正常使用'
self._question = '題外'
if chat_id != self._userid:
- bot.sendMessage(chat_id, "登入失敗,請先私訊我重新登入 kCOJ", reply_to_message_id=message_id)
+ bot.sendMessage(chat_id, "登入失敗,請先私訊我重新登入 KCOJ", reply_to_message_id=message_id)
bot.sendMessage(self._userid, "哇...登入失敗,讓我們重新開始", reply_markup=ReplyKeyboardRemove())
self.press_username()
- def fail_connecting(self, chat_id, message_id):
+ def connect_failed(self, chat_id, message_id):
self._status = '正常使用'
self._question = '題外'
if chat_id != self._userid:
- bot.sendMessage(chat_id, "kCOJ 離線中!請稍後再試", reply_to_message_id=message_id)
+ bot.sendMessage(chat_id, "KCOJ 離線中!請稍後再試", reply_to_message_id=message_id)
else:
- bot.sendMessage(self._userid, "kCOJ 離線中!請稍後再試",
+ bot.sendMessage(self._userid, "KCOJ 離線中!請稍後再試",
reply_markup=ReplyKeyboardMarkup(keyboard=[
["首頁🏠", "幫助📚"]
], resize_keyboard=True))
@@ -103,25 +102,25 @@ class Kuser:
def check_online(self, chat_id, message_id=''):
result = self._api.check_online()
if result == None:
- self.fail_connecting(chat_id, message_id)
+ self.connect_failed(chat_id, message_id)
return False
else:
if result == False:
- self._api.login_kcoj(self._username, self._password)
+ self._api.login(self._username, self._password)
result = self._api.check_online()
if result == False:
- self.fail_login(chat_id, message_id)
+ self.login_failed(chat_id, message_id)
elif result == None:
- self.fail_connecting(chat_id, message_id)
+ self.connect_failed(chat_id, message_id)
return result == True
- def logout_system(self):
+ def logout(self):
self._status = '正常使用'
self._question = '題外'
bot.sendMessage(self._userid, "您現在已經是登出的狀態。", reply_markup=ReplyKeyboardRemove())
self.press_username()
- def display_main(self, chat_id):
+ def show_homepage(self, chat_id):
self._status = '正常使用'
self._question = '題外'
q_dict = self._api.list_questions()
@@ -131,7 +130,7 @@ class Kuser:
q_str += "📗" + key + " (DL: " + q_dict[key][0] + ")\n [[" + q_dict[key][2] + "]]"
q_str += "⚠️" if q_dict[key][2] == '未繳' else "✅"
q_str += " /question_" + key + "\n\n"
- bot.sendMessage(chat_id, "💁 " + self._username + " " + config.NAME + "\n"
+ bot.sendMessage(chat_id, "💁 " + self._username + " " + NAME + "\n"
"➖➖➖➖➖\n"
"📝可繳交的作業\n\n" + q_str + \
"➖➖➖➖➖\n" + choice(promote.sentences),
@@ -142,7 +141,7 @@ class Kuser:
], resize_keyboard=True) if chat_id == self._userid else ReplyKeyboardRemove(),
disable_web_page_preview=True)
- def display_questions(self, chat_id):
+ def list_questions(self, chat_id):
self._status = '正常使用'
self._question = '題外'
q_dict = self._api.list_questions()
@@ -152,7 +151,7 @@ class Kuser:
q_str += "" + key + " (DL: " + q_dict[key][0] + ")\n [[" + q_dict[key][2] + "]]"
q_str += "⚠️" if q_dict[key][2] == '未繳' else "✅"
q_str += " /question_" + key + "\n\n"
- reply = bot.sendMessage(chat_id, "💁 " + self._username + " " + config.NAME + "\n"
+ reply = bot.sendMessage(chat_id, "💁 " + self._username + " " + NAME + "\n"
"➖➖➖➖➖\n"
"📝所有作業\n\n" + q_str + \
"➖➖➖➖➖\n" + choice(promote.sentences),
@@ -164,7 +163,7 @@ class Kuser:
disable_web_page_preview=True)
bot.sendMessage(chat_id, "點我到題庫頂", reply_to_message_id=reply['message_id'])
- def display_question(self, number, chat_id):
+ def show_question(self, number, chat_id):
self._status = '查看題目'
self._question = number
if number in external.QUESTION:
@@ -174,7 +173,7 @@ class Kuser:
ext_q = False
content = '```\n' + self._api.show_question(number) + '\n```'
q = self._api.list_questions()[number]
- q_str = "💁 *" + self._username + "* [" + config.NAME + "]\n"
+ q_str = "💁 *" + self._username + "* [" + NAME + "]\n"
q_str += "➖➖➖➖➖\n"
q_str += "📗" if q[1] == '期限未到' else "📕"
q_str += "*" + number + "* (DL: " + q[0] + ")\n [[[" + q[2] + "]]]"
@@ -189,11 +188,11 @@ class Kuser:
if ext_q == False:
bot.sendMessage(chat_id, "點我到題目頂", reply_to_message_id=reply['message_id'])
- def help_you(self):
+ def help(self):
bot.sendMessage(self._userid, "這裡是 kC Online Judge Bot!\n"
- "可以簡稱 kCOJ Bot,目前定居於 [" + config.NAME + "]\n"
+ "可以簡稱 KCOJ Bot,目前定居於 [" + NAME + "]\n"
"作用是讓大家可以方便的透過我使用郭老程設課的 Online Judge\n"
- "➡️[傳送門](" + config.URL + ")\n"
+ "➡️[OJ 傳送門](" + URL + ")\n"
"操作很簡單(?)\n\n"
"還是稍微提幾個需要注意的地方:\n"
"1. 📗代表還可以繳交的作業,📕代表已經不能繳交的作業\n"
@@ -213,7 +212,7 @@ class Kuser:
def upload_answer(self):
self._status = '上傳答案'
q = self._api.list_questions()[self._question]
- q_str = "💁 " + self._username + " " + config.NAME + "\n"
+ q_str = "💁 " + self._username + " " + NAME + "\n"
q_str += "➖➖➖➖➖\n"
q_str += "📗" if q[1] == '期限未到' else "📕"
q_str += "" + self._question + " (DL: " + q[0] + ")\n [[" + q[2] + "]]"
@@ -255,7 +254,7 @@ class Kuser:
["登出🚪", "改密碼💱", "幫助📚"]
], resize_keyboard=True))
- def fail_send(self):
+ def send_failed(self):
self._status = '正常使用'
bot.sendMessage(self._userid, "檔案不能超過 20 MB!上傳失敗",
reply_markup=ReplyKeyboardMarkup(keyboard=[
@@ -266,7 +265,7 @@ class Kuser:
def list_passers(self):
self._status = '正常使用'
q = self._api.list_questions()[self._question]
- q_str = "💁 " + self._username + " " + config.NAME + "\n"
+ q_str = "💁 " + self._username + " " + NAME + "\n"
q_str += "➖➖➖➖➖\n"
q_str += "📗" if q[1] == '期限未到' else "📕"
q_str += "" + self._question + " (DL: " + q[0] + ")\n [[" + q[2] + "]]"
@@ -285,7 +284,7 @@ class Kuser:
def list_results(self):
self._status = '正常使用'
q = self._api.list_questions()[self._question]
- q_str = "💁 " + self._username + " " + config.NAME + "\n"
+ q_str = "💁 " + self._username + " " + NAME + "\n"
q_str += "➖➖➖➖➖\n"
q_str += "📗" if q[1] == '期限未到' else "📕"
q_str += "" + self._question + " (DL: " + q[0] + ")\n"