---
# System prepended metadata

title: 10/21 二籌 (系統分析與設計_UseCase)

---

# 10/21 二籌

:::info
時間：2023/10/20 20:30 ~ 22:30
地點：線上會議(Discord)
參與：xiaojie4082、wei._.614

![](https://hackmd.io/_uploads/SJ-sEZeGa.png)
:::
:::info
時間：2023/10/20 22:30 ~ 2023/10/21 01:30
地點：-
參與：xiaojie4082、SmingXO(睡著 ==)

![](https://hackmd.io/_uploads/ryHO4VgMa.png)
:::

## 系統分析與設計
### 題目
- 授課老師: 謝孟諺
- 系統題目: Discord，在校園怎麼玩？打造全台最大 Discord 校園社群！
- 組員：
    - 資工三A 陳秉杰(411000554)
    - 資工三A 黃哲偉(411004134)
    - 資工三A 吳昀霖(411017666)
    - 資工三A 張致鏇(411017925) 未選修

### 系統要解決的問題描述(請用條列式表達)
#### 故事情境或要解決的問題描述:

小鏇是靜宜大學的學生，他希望可以透過聊天機器人 (Discord Bot) 來隨時掌握校園內外的資訊。
1. 小鏇常常錯過學校的重要資訊，他可以查看機器人轉發的即時公告。
2. 小鏇在課業上遇到困難時，他能夠向機器人 (GPT-3.5 Turbo) 討論課業上的問題。
3. 當小鏇想查看天氣時，他能在專屬的頻道查看天氣的資訊 (每天早上8、12、20點發布)。
4. 小鏇每天都要搭公車到學校，他可以在專屬的頻道查看公車資訊面板，或者透過指令查詢目前的公車時刻。
5. 小鏇需要查看課程相關資訊時，他可以利用機器人來取得選課相關資訊、評價和考古題。
    - a. 搜尋課程：輸入 [授課老師/課程] [關鍵字]，回覆所有符合條件的課程。
    - b. 課程綱要：輸入 [課程代號]，回覆課程簡介、評分方式和課程評論 (透過 PUHub 取得 #註1)。
    - c. 課程餘額：輸入 [課程代號]，回覆修課人數與餘額。
5. 小鏇肚子餓了，但選擇太多，不知道該吃什麼，所以讓機器人隨機決定他要吃什麼。

\# 註1：PUHub 為此專題延伸之網頁，為學生提供包含機器人基本功能外，額外的其他服務(例如：提供課程評價 API、上傳考古題...等)。

#### 系統的目標和遭遇問題:
- 目標 :
    - 提供靜宜大學學生一個隨時掌握校園內外資訊的管道，協助學生解決課業、生活等方面的問題。
- 遭遇問題 :
    - 系統需要設計得簡單易用，能夠輕鬆上手。
    - 需要確保提供的資訊準確且時效性，以免誤導。
    - 需要能夠隨著需求的變化進行擴展，提供更多功能和服務。

#### 圖解說明:
- 使用者輸入指令
    ![](https://hackmd.io/_uploads/SyzrSexf6.png)
- 機器人回覆
    ![](https://hackmd.io/_uploads/S1gxUgxGp.png)

### 事件表

| 參與者 | 事件描述(目標描述) | 使用案例(UseCase) |
| :--------: | :--------: | :--------: |
| 小鏇 | 查看機器人指令列表 | 查看指令 |
| 小鏇 | 發送指令至 Discord 頻道 | 發送指令 |
| Discord | 提供指令頻道 | 接收發布訊息 |
| Timer | 定時追蹤最新公告 | 定時發布資訊 |
| Timer | 定時發布天氣資訊 | 定時發布資訊 |
| Timer | 定時更新公車時刻 | 定時發布資訊 |
| 機器人 | 提供 Discord 指令列表 | 提供指令 |
| 機器人 | 讀取指令 | 讀取指令 |
| 機器人 | 生成式AI聊天機器人 | 聊天機器人 |
| 機器人 | 天氣資訊 | 天氣功能 |
| 機器人 | 公車查詢 | 公車功能 |
| 機器人 | 餐廳推薦 | 餐廳推薦 |
| 機器人 | 課程資訊(搜尋課程) | 課程功能 |
| 機器人 | 課程資訊(課程評價) | 課程功能 |
| 機器人 | 課程資訊(課程餘額) | 課程功能 |
| PUHub | 課程評價 API | 提供 API |


### UseCase Diagram
- v1
```UML
@startuml
actor 小鏇
actor Timer

rectangle Discord{
    rectangle 靜宜大學_伺服器{
        actor "📣｜最新消息 (公告頻道)" as 最新消息
        actor "⛅｜天氣預報 (公告頻道)" as 天氣預報
        actor "⛅｜公車資訊 (公告頻道)" as 公車資訊
        actor "💬｜校園助手 (指令頻道)" as 校園助手
    }
    usecase "Discord API" as Discord_API 

}

rectangle 機器人{

    usecase "定時發布資訊" as 定時發布資訊

    usecase "讀取指令" as 讀取指令
    usecase "聊天機器人" as 聊天機器人
    usecase "最新公告" as 最新公告
    usecase "天氣資訊" as 天氣資訊
    usecase "公車查詢" as 公車查詢
    usecase "要吃什麼" as 要吃什麼
    usecase "課程資訊" as 課程資訊
    usecase "搜尋課程" as 搜尋課程
    usecase "課程綱要" as 課程綱要
    usecase "課程餘額" as 課程餘額

    usecase "Webhook" as Webhook

    定時發布資訊 --> 最新公告 
    定時發布資訊 --> 天氣資訊
    定時發布資訊 --> 公車查詢

    讀取指令 --> 聊天機器人
    讀取指令 --> 公車查詢
    讀取指令 --> 課程資訊
    讀取指令 --> 要吃什麼

    課程資訊 --> 搜尋課程 : <<include>>
    課程資訊 --> 課程綱要 : <<include>>
    課程資訊 --> 課程餘額 : <<include>>

    聊天機器人 --> Discord_API
    最新公告 --> Webhook
    天氣資訊 --> Webhook
    公車查詢 --> Webhook
    課程資訊 --> Discord_API
    要吃什麼 --> Discord_API

}

rectangle PUHub{

    usecase "GET /api/course_evaluation" as course
    usecase "POST /api/get_news" as news 
    actor "MySQL" as MySQL
    usecase "選課評價" as 選課評價_PUHub
    usecase "最新消息" as 最新消息_PUHub
    usecase "... 略 (與機器人無關)" as 略

    最新公告 --> news
    課程綱要 --> course
    選課評價_PUHub <--> MySQL
    最新消息_PUHub <-- MySQL
    news --> MySQL
    MySQL --> course
    

}

小鏇 --> 最新消息
小鏇 --> 天氣預報
小鏇 --> 公車資訊
小鏇 --> 校園助手

Webhook --> 最新消息
Webhook --> 天氣預報
Webhook --> 公車資訊
Webhook --> 校園助手

小鏇 --> 選課評價_PUHub
小鏇 --> 最新消息_PUHub

Discord_API  --> 讀取指令
Timer --> 定時發布資訊

Discord_API <--> 校園助手

@enduml
```

- v2
![](https://hackmd.io/_uploads/BkjyOrlfT.png)

```uml
@startuml
actor 使用者
actor Timer
actor "Discord API" as Discord_API 

rectangle 靜宜大學_伺服器{
    usecase "📣｜最新消息 (公告頻道)" as 最新消息
    usecase "⛅｜天氣預報 (公告頻道)" as 天氣預報
    usecase "⛅｜公車資訊 (公告頻道)" as 公車資訊
    usecase "💬｜校園助手 (指令頻道)" as 校園助手
}

rectangle 機器人{
    usecase "定時發布" as 定時發布
    usecase "處理指令" as 處理指令
    usecase "聊天機器人" as 聊天機器人
    usecase "最新公告" as 最新公告
    usecase "天氣資訊" as 天氣資訊
    usecase "公車查詢" as 公車查詢
    usecase "要吃什麼" as 要吃什麼
    usecase "課程資訊" as 課程資訊
    usecase "搜尋課程" as 搜尋課程
    usecase "課程綱要" as 課程綱要
    usecase "課程餘額" as 課程餘額
    usecase "Webhook 發佈" as Webhook
}

rectangle PUHub{
    actor "MySQL" as MySQL
    usecase "GET /api/course_evaluation" as course
    usecase "POST /api/get_news" as news 
    usecase "選課評價" as 選課評價_PUHub
    usecase "最新消息" as 最新消息_PUHub
    usecase "... 略 (與機器人無關)" as 略

}

使用者 --> 最新消息
使用者 --> 天氣預報
使用者 --> 公車資訊
使用者 --> 校園助手

使用者 --> 選課評價_PUHub
使用者 --> 最新消息_PUHub

Timer --> 定時發布

定時發布 --> 最新公告 
定時發布 --> 天氣資訊
定時發布 --> 公車查詢

Discord_API <--> 校園助手
Discord_API  --> 處理指令

處理指令 --> 聊天機器人
處理指令 --> 公車查詢
處理指令 --> 課程資訊
    課程資訊 --> 搜尋課程 : <<include>>
    課程資訊 --> 課程綱要 : <<include>>
    課程資訊 --> 課程餘額 : <<include>>
處理指令 --> 要吃什麼

聊天機器人 --> Discord_API
課程資訊 --> Discord_API
要吃什麼 --> Discord_API

Webhook --> 最新消息
Webhook --> 天氣預報
Webhook --> 公車資訊
Webhook --> 校園助手

最新公告 --> Webhook
天氣資訊 --> Webhook
公車查詢 --> Webhook

最新公告 --> news
課程綱要 --> course
MySQL <--> 選課評價_PUHub
MySQL <-- 最新消息_PUHub
MySQL --> news
MySQL --> course

@enduml
```