File tree 35 files changed +320
-257
lines changed
35 files changed +320
-257
lines changed Original file line number Diff line number Diff line change 1
- # 中電會 第三屆專案開發文檔
1
+ # 中電會 第3屆專案開發說明文件
2
2
3
- > start at 7/26/2024
3
+ > start at 7/26/2024
4
4
5
- 為了不要被第四屆罵說第三屆學長伺服器設後不理,撰寫了這份文檔 。
5
+ 為了不要被第4屆罵說第3屆學長伺服器設後不理,撰寫了這份說明文件 。
6
6
7
7
8
8
## 本地開發
Original file line number Diff line number Diff line change 1
1
elvismao :
2
2
name : 毛哥EM
3
- title : 第三屆資訊組組長
3
+ title : 第3屆資訊組組長
4
4
url : https://github.com/Edit-Mr
5
5
image_url : https://github.com/Edit-Mr.png
6
6
7
7
yangshun :
8
8
name : Each Chen
9
- title : 第三屆資訊組組
9
+ title : 第3屆資訊組組員
10
10
url : https://github.com/iach526526
11
11
image_url : https://github.com/iach526526.png
Original file line number Diff line number Diff line change 1
1
{
2
- "label" : " 指令表" ,
3
- "position" : 7 ,
4
- "link" : {
5
- "type" : " generated-index" ,
6
- "description" : " ⬆️ ⬆️ ⬇️ ⬇️ ⬅️ ➡️ ⬅️ ➡️ 🅱️ 🅰️在這裡,參數如果是必填會用 { } 包起來,選填用[ ]。| 分隔多個可選參數"
7
- }
2
+ "label" : " 指令表" ,
3
+ "position" : 7 ,
4
+ "link" : {
5
+ "type" : " generated-index" ,
6
+ "description" : " ⬆️ ⬆️ ⬇️ ⬇️ ⬅️ ➡️ ⬅️ ➡️ 🅱️ 🅰️在這裡,參數如果是必填會用 { } 包起來,選填用[ ]。| 分隔多個可選參數"
8
7
}
9
-
8
+ }
Original file line number Diff line number Diff line change @@ -3,24 +3,30 @@ sidebar_position: 4
3
3
authors : [iach526526]
4
4
slug : class
5
5
title : 身分組
6
- description : 本條目包括創建 、發送、領取特殊身分組
6
+ description : 本頁面包括新增 、發送、領取特殊身分組
7
7
---
8
+
8
9
中電喵支援輸入兌換代碼獲得一些不公開的身分組,這項功能提供主題課程、~~ 工人交接~~ 、~~ 特殊身分組購買~~ 使用。到 #🎁兌換區 輸入擁有的兌換代碼就會生效兌換成獎勵
9
10
10
11
![ alt text] ( ../../../static/img/exchange.png )
11
12
12
13
> 註:不公開身分組指的是你無法在頻道與身分組列表透過點選主動獲得的身分組
13
14
14
- # 創建
15
+ ## 新增身分組
16
+
15
17
- 限制使用權限: true
16
18
- admin only
19
+
17
20
> ``` add_class {class_code} {name} {theme}{teacher}{time} ```
21
+
18
22
- class_code:兌換代碼
19
23
- name:代碼對應分送的身分組名稱
20
24
- theme:課程主題,用於領取時顯示領了什麼課的身分組
21
25
- time:課程時間,用於領取顯示課程時間
22
26
23
- 這些參數會在資料庫 (JSON) 寫入一筆資料,提供日後的輸入做比對
24
- <!-- 我覺得它應該被改成 SQL 或 SOL lite配合日後的其他禮物領取 -->
27
+ 這些參數會在資料庫(JSON)寫入一筆資料,提供日後的輸入做比對
28
+ <!-- 我覺得它應該被改成 SQL 或 SQLite配合日後的其他禮物領取 -->
29
+
25
30
## 領取身分組
31
+
26
32
到 #🎁兌換區 點擊按鈕即可輸入
Original file line number Diff line number Diff line change @@ -5,11 +5,13 @@ slug: ctf
5
5
title : CTF 指令
6
6
description : 找出 flag ,獲得豐厚獎勵
7
7
---
8
- ## 創建一道題目
8
+ ## 新增一道題目
9
+
9
10
- 限制使用權限:true
10
11
- 允許使用的身分組:ctf 出題者
11
12
12
13
> ``` /create create {title:str} {flag:str} {score:int} [limit:int] [case:bool] [start:YY-MM-DD HH:MM:SS] [end:YY-MM-DD HH:MM:SS] ```
14
+
13
15
- title:題目標題
14
16
- flag :該題解答,格式建議為 ``` SCAICT{falg_string} ```
15
17
- score:解題後能獲得的電電點數量,現在只能選擇贈送電電點,暫時沒有以抽獎劵作為獎勵的功能
@@ -19,12 +21,15 @@ description: 找出 flag ,獲得豐厚獎勵
19
21
- end:結束時間,預設永不結束
20
22
21
23
## 刪除一道題目
24
+
22
25
- 限制使用權限:true
23
26
- 允許使用的身分組:ctf 出題者
27
+
24
28
> ``` /ctf delete {qid} {channel_id} {key} ```
25
- - qid:每道 ctf 的唯一 ID ,會顯示在該題目的下方
26
- - channel_id:該題目的題目敘述和按鈕存在的頻道,如果題目在討論串發布,需要在討論串列表右鍵點選「複製討論串 ID」
27
- - key :欲刪除題目的 flag,這是防呆保護,出題者應該知道自己的 flag
29
+
30
+ - qid:每道 CTF 的唯一 ID ,會顯示在該題目的下方
31
+ - channel_id:該題目的題目說明和按鈕存在的頻道,如果題目在討論串發布,需要在討論串列表右鍵點選「複製討論串 ID」
32
+ - key:欲刪除題目的 flag,這是防呆保護,出題者應該知道自己的 flag
28
33
29
34
下圖是拿到刪除 CTF 需要的參數範例。如果在頻道上按了右鍵沒有複製 ID 的選項,你需要到設定開啟開發者模式
30
- ![ ctfID] ( ../../../static/img/ctfID.png )
35
+ ![ ctfID] ( ../../../static/img/ctfID.png )
Original file line number Diff line number Diff line change @@ -5,14 +5,17 @@ slug: point
5
5
title : 電電點操作指令
6
6
description : 獲得、查詢自己的電電點
7
7
---
8
+
8
9
## 你有有多少電電點
10
+
9
11
> ``` /check_point ```
10
- - 限制使用權限:false
11
12
13
+ - 限制使用權限:false
12
14
13
15
無須攜帶任何參數,會檢索指令發起人當前的連續登入、電電點數量狀態
14
16
15
17
## 每日充電
18
+
16
19
> ``` /charge ```
17
20
18
21
- 限制使用權限:false
Original file line number Diff line number Diff line change @@ -5,13 +5,16 @@ slug: gift
5
5
title : 發送禮物給某人
6
6
description : 贈送禮物
7
7
---
8
+
8
9
# /dm_gift
10
+
9
11
> ``` dm_gift {target_str...} {電電點 | 抽獎券} {贈送物品數量} ```
10
12
11
13
- 限制使用權限:true
12
14
- admin only
13
15
14
16
## 描述
17
+
15
18
這個指令可以選擇多個使用者統一發送相同數量的電電點或抽獎券,第一個參數 ``` target_str ``` 要填入 Discord 使用者名稱,** 不是** 顯示名稱。下圖框選起來的部分才是使用者名稱
16
19
17
- ![ DCid] ( ../../../static/img/DCid.png )
20
+ ![ DCid] ( ../../../static/img/DCid.png )
Original file line number Diff line number Diff line change 1
1
{
2
- "label" : " 開發者專區" ,
3
- "position" : 6 ,
4
- "link" : {
5
- "type" : " generated-index" ,
6
- "description" : " 又臭又長的東西"
7
- }
2
+ "label" : " 開發者專區" ,
3
+ "position" : 6 ,
4
+ "link" : {
5
+ "type" : " generated-index" ,
6
+ "description" : " 又臭又長的東西"
8
7
}
9
-
8
+ }
Original file line number Diff line number Diff line change @@ -9,11 +9,13 @@ description: 介紹一下
9
9
# 關於這個專案
10
10
11
11
恭喜你成為中電喵飼養員,為了成為稱職的飼養員,你需要有以下先備知識:
12
- - python 程式設計
12
+
13
+ - Python 程式設計
13
14
- SQL 資料庫維護
14
15
- 億點點 Linux 操作技巧
15
16
16
- 以下是中電喵專案的檔案樹,為了篇幅省略了一些小檔案或不重要的資料夾(如 .git ),這裡定義重資料夾之間的相對關係。
17
+ 以下是中電喵專案的檔案樹,為了篇幅省略了一些小檔案或不重要的資料夾(如 .git ),這裡著重定義資料夾之間的相對關係。
18
+
17
19
```
18
20
| app.py
19
21
| main.py
@@ -68,32 +70,35 @@ description: 介紹一下
68
70
|
69
71
\---test
70
72
```
71
- ## 中電喵,啟動!
72
73
74
+ ## 中電喵,啟動!
73
75
74
76
### \. github
77
+
75
78
在 GitHub repository 的自動化執行腳本。目前有的自動化腳本:
76
- - pylint
77
- - Python 程式碼風格檢查程式,變數名稱亂寫可是不能成功 PR 的喔!
78
- - notion API
79
- - 連接中電會工人 notion 代辦事項和 Discord hook ,用來顯示中電喵 repo 的 issue
80
79
80
+ - Notion API
81
+ - 連接中電會工人 Notion 代辦事項和 Discord hook ,用來顯示中電喵 repo 的 issue
82
+ - Pylint
83
+ - Python 程式碼風格檢查程式,變數名稱亂寫可是不能成功 PR 的喔!
81
84
82
85
### 中電喵本體
86
+
83
87
中電喵聊天程式從 main.py 開始,會先從 cog/ 讀取相依 .py檔案,cog/* .py 定義了斜線指令要執行的行為,若指令有一些非常通用或冗長的函式:例如資料庫接等其他特殊行為。獨立出來的 python 檔案會放在 cog/core 提供引用
84
88
85
89
### 中電商店
86
- 中電商店的主程式是 app.py,網頁框架使用 flask。引入 \templates、\static 靜態資源渲染,使用 \cog\core 裡面的程式和資料庫溝通。
87
90
91
+ 中電商店的主程式是 app.py,網頁框架使用 flask。引入 \templates、\static 靜態資源渲染,使用 \cog\core 裡面的程式和資料庫溝通。
88
92
89
93
### DataBase
94
+
90
95
在中電喵的幼貓時期,其實是把所有成員的電電點、CTF題目等動態資料用 JSON 儲存在/DataBase,現在這裡只有幾個檔案需要留意:
96
+
91
97
- class.json
92
- - 中電喵有個指令是管理者創建課程,使用者可以在兌換區輸入課程行前信的課程代碼領取課程身分組存取課程用頻到 ,這個檔案儲存了可兌換的課程資料
98
+ - 中電喵有個指令是管理者新增課程,使用者可以在兌換區輸入課程行前信的課程代碼領取課程身分組並存取課程用頻道 ,這個檔案儲存了可兌換的課程資料
93
99
- server.config.json
94
- - 存放中電會 Discord 伺服器內的特殊頻道、表情符號 ID。程式運行中會
100
+ - 存放中電會 Discord 伺服器內的特殊頻道、表情符號 ID。程式運行中會<!-- 會怎樣? -->
95
101
- server.config-alph.json
96
102
- server.config 的複製檔案,但是所有頻道和表情 ID 都是來自另一個和中電會 Discord 社群相同的伺服器,開發人員可以使用自己的 bot 在 alph 伺服器測試開發中的功能
97
103
- slot.json
98
104
- 中電商店抽獎券
99
-
Original file line number Diff line number Diff line change 5
5
"type" : " generated-index" ,
6
6
"description" : " 不要看到程式碼就關掉啦"
7
7
}
8
- }
8
+ }
Original file line number Diff line number Diff line change @@ -5,8 +5,10 @@ slug: admin-code
5
5
title : admin_role
6
6
description : 管理者指令
7
7
---
8
+
8
9
# admin_role
9
- admin_role 裡面的指令使用都和伺服器管理有關,大部分都是擁有伺服器最高管理權限的帳號才可以使用的指令。使用前應該先檢查發起命令的用戶:
10
+
11
+ admin_role 裡面的指令使用都和伺服器管理有關,大部分都是擁有伺服器最高管理權限的帳號才可以使用的指令。使用前應該先檢查發起命令的使用者:
10
12
``` ctx.author.guild_permissions.administrator ```
11
13
若得到 false 應該直接拒絕執行。
12
14
@@ -15,6 +17,7 @@ admin_role 裡面的指令使用都和伺服器管理有關,大部分都是擁
15
17
使用 ``` discord.utils.find ``` 搜尋使用者名並發起私訊傳送獎勵按鈕,因為遍歷需要花一點時間,所以呼叫 ``` await ctx.defer() ``` 先在 Discord 顯示中電喵正在思考,避免回應超時被 Discord kill 掉。
16
18
17
19
Discord 會在按鈕傳送時給每個按鈕一個唯一 ID,btnID (即是訊息 ID),中電喵會把 btnID、獎品類型、贈送數量、收件者存入 gift 表格。
20
+
18
21
``` bash
19
22
DB> describe gift;
20
23
+-----------+-------------------------------+------+-----+---------+-------+
Original file line number Diff line number Diff line change @@ -5,25 +5,30 @@ slug: about
5
5
title : Link Start!
6
6
description : 介紹一下
7
7
---
8
+
8
9
# 程式碼專區
10
+
9
11
> 屎山何其多
10
12
11
13
## 簡介
14
+
12
15
每頁會解釋中電喵 cog 裡面的 Python 檔案,相關的功能會放在同一個檔案,日後有新功能務必用檔名聯想這是幹什麼用的。cog 裡面的程式基本上都是核心的聊天指令,太胖或是太通用的 function 可以放到 cog/core 裡面方便引入。
13
16
14
17
- 舉例:
15
18
16
19
cog/core SQL.py 檔有一個 function write 需要呼叫,應該寫成:
20
+
17
21
``` py
18
- from cog.core.SQL import write
22
+ from cog.core.sql import write
19
23
```
20
24
21
25
注意盡量不要單獨 import 整個檔案
22
26
23
27
- 錯誤示範
24
28
25
29
``` py
26
- import cog.core.SQL as SQL
30
+ import cog.core.sql as SQL
31
+
27
32
# call function
28
33
SQL .write(argv... )
29
34
```
@@ -37,29 +42,23 @@ SQL.write(argv...)
37
42
+-------------------+
38
43
| Tables_in_Discord |
39
44
+-------------------+
40
- | CommentPoints |
41
- | USER |
45
+ | comment_points |
46
+ | user |
42
47
| ctf_data |
43
48
| ctf_history |
44
49
| game |
45
50
| gift |
46
51
+-------------------+
47
52
```
48
53
49
- ### CommentPoints
50
-
51
-
52
- ### USER
54
+ ### comment_points
53
55
56
+ ### user
54
57
55
58
### ctf_data
56
59
57
-
58
60
### ctf_history
59
61
60
-
61
62
### game
62
63
63
-
64
64
### gift
65
-
Original file line number Diff line number Diff line change @@ -12,25 +12,32 @@ description: 這 很 重 要!
12
12
13
13
## 如何在伺服器上長時間運作?
14
14
15
- 若在伺服器上的專案資料夾執行 "python main.py" 這個指令只會在 ssh 連線階段執行這個工作,這適合短時間的測試,斷開終端機後服務就會關閉。所以要在啟動指令前加上 *** nohop*** 讓工作可以在背景持續執行。此時程式所有的 print 或 error 回報預設會在該專案目錄下面的 nohup.out ,想要更改儲存位置和檔名可以使用管道符號 。
15
+ 若在伺服器上的專案資料夾執行 "python main.py" 這個指令只會在 ssh 連線階段執行這個工作,這適合短時間的測試,斷開終端機後服務就會關閉。所以要在啟動指令前加上 *** nohop*** 讓工作可以在背景持續執行。此時程式所有的 print 或 error 回報預設會在該專案目錄下面的 nohup.out ,想要變更儲存位置和檔名可以使用管道符號 。
16
16
17
+ 利用管道符號把程式輸出存在 ` /var/log/DiscordBot/ ` ,並用時間命名
17
18
18
- 利用管道符號把程式輸出存在 /var/log/DiscordBot/ ,並用時間命名
19
19
### 執行中電喵本體
20
+
20
21
``` bash
21
22
nohup python3 main.py & > /var/log/DiscordBot/Log_$( date +%Y-%m-%dT%H-%M-%S) .log&
22
23
```
24
+
23
25
### 中電商店
26
+
24
27
``` bash
25
28
nohup flask run & > /var/log/uwuStore/Log_$( date +%Y-%m-%dT%H-%M-%S) .log&
26
29
```
30
+
27
31
執行後 CLI 會顯示 Process ID,下面的例子是開啟了一個 Process ID 為 48763 的工作。這個 ID 是唯一的,用來辨別這個運行的工作。每次開啟服務後建議寫在記事本,下次關服務會比較好找到這個服務。
32
+
28
33
```
29
34
[2] 48763
30
35
```
36
+
31
37
## 關閉長時間運作的服務
32
38
33
- 關閉用 htop 運行中的服務,可以使用:
39
+ 關閉用 htop 運行中的服務,可以使用:
40
+
34
41
- ``` kill <Process ID> ```
35
42
- ``` htop ``` 找到要關閉的 Process 按下 F9
36
43
@@ -41,7 +48,9 @@ nohup flask run &>/var/log/uwuStore/Log_$(date +%Y-%m-%dT%H-%M-%S).log&
41
48
> Tips:在 htop 內可以使用 F6 排序幫助尋找目標 Process ;選取到目標服務後按下 F9 可以 kill 掉它
42
49
43
50
## 備份資料庫
51
+
44
52
### mysqldump 指令
53
+
45
54
定期備份資料庫是一件很重要的事,使用 mysqldump 指令把某個 database 的表格樣式和儲存的資料都儲存到一個 .spl 檔。裡面會存構成目前資料庫需要的指令。
46
55
47
56
``` bash
@@ -52,10 +61,11 @@ mysql -u [username] -p [database] < backup.sql #把 .sql 執行把資料庫
52
61
```
53
62
54
63
### 定期備份資料庫
64
+
55
65
crontab
56
66
57
- ## 文檔撰寫
67
+ ## 撰寫說明文件
58
68
59
- 當開發完一個新的指令或更新功能,得在文檔紀錄新的變動 ,建議先撰寫使用者向的使用說明,再寫技術文檔 。組織語言讓不會使用的人學會之後,對功能的細節也會更清楚,過程中也會想到開發時沒有想到的例外狀況或更多應用情境。
69
+ 當開發完一個新的指令或更新功能,得在說明文件記錄新的變動 ,建議先撰寫使用者向的使用說明,再寫技術說明文件 。組織語言讓不會使用的人學會之後,對功能的細節也會更清楚,過程中也會想到開發時沒有想到的例外狀況或更多應用情境。
60
70
61
- 親測有效,整理發送課程身分組的時候就想到其實可以把一直想不到方法實踐的購買特殊身分組用在兌換區。
71
+ 親測有效,整理發送課程身分組的時候就想到其實可以把一直想不到方法實踐的購買特殊身分組用在兌換區。
You can’t perform that action at this time.
0 commit comments