# 技術組
[toc]
## 技術組 (11)
* 從 https://hackmd.io/qJuUVoePRauR5uGD5QX12A 複製過來的東東
* [RTFM](https://discord.com/developers/docs/intro)
* 決定 language
* 開發機器人
* 主要開發順序
* Bot alert API
* 一旦使用上出現非預期錯誤,向特定 channel 發送錯誤報告
* 有助於 debug,使用者發生問題時亦能快速得知相關訊息
* 加入群組審核
* 串 google oauth
* 用信箱驗證
* DB API (discord id + mail/圖)
* 身份組選擇(訂閱)機制
* 回覆表情符號獲得身分組 -> 可以看到特定頻道
* 有訂閱的東西發的時候機器人會tag這個身分組
* 廣播機器人
* 純粹用 cd 限制濫用問題
* 即時頻道 & 以驗證頻道,也許前者可以有較短 cd?
* 申請頻道機制
* 如何連署?
* 不太急的 feature
* 檢舉機制
* 實名私訊機制
* 私人語音頻道
* 濫用監控機制(考慮)
* Cog
* feature request 頻道
* 組長
* jerrycool123
* 成員
* ブイ(rareone0602)
* KilinWei
* lllIIIIllll
* MartianSheep
* Yvecca
* 霏崎
* General_Winter
* CKB
* ChungVincent
* Xiayu
* Rayh
## 自我介紹 (?)
credit: 電熊的表
方便我分配工作所以有任何你覺得有用的專長就幫我寫一下
| 姓名 or 暱稱 (方便稱呼??) | discord ID | 系級 | Discord bot/程設經驗/專長 | Gmail |
|:------------------------- | ------------------- | ------------ |:------------------------------------------------------------------------------------------------------------ | ---------------------------- |
| 翁祖毅 (jerry) | jerrycool123#7133 | 資工四 | 有寫過 discord.py, red discord bot,python/C/C++/java | jerrycool71534@gmail |
| 陳光裕 (Yvecca) | Yvecca#3135 | 資工四 | 只會C、C++,python正在學習中 | justin881110@gmail.com|
| 郭懷元 (Frank) | General_Winter#1576 | 資工二 | 摸過 discord.py,主要會 py & c ~~,修過NASA算一種技能嗎~~ | frank910311@gmail.com |
| 鐘晨瑋 (VC) | ChungVincent#4447 | 大氣四 | 寫過 docker、flask 但都是小專案而已,python/C/C++ | b07209016@ntu.edu.tw |
| 王程煜(霏崎) | 霏崎#4287 | 資工二(台科) | 碰過 discord.py,只寫過一些自用的小程式,C/C++/Python | b10915024@gapps.ntust.edu.tw |
| 高宇颺(Xiayu) | Xiayu#0028 | 森林二 | 用過 discord.py,寫過3 4台機器人,python | b09605029@ntu.edu.tw |
| 陳可邦(CKB) | ChenKB91#2206 | 資工二 | python & C, 做過簡單github page,修過NASA? | b09902011@ntu.edu.tw |
| 黃柏睿(Ray)| Rayh#4581 | 電機二(雙資工) | 用過 discord.py| b09990171@ntu.edu.tw rayray2002.huang@gmail.com|
| 葉柏宏(伊布) | ブイ#0602 | 資科二 | 給一些畫大餅的沒用意見 > [畫 furry](https://www.pixiv.net/users/16903036) > 開發(OOP 為主) > 寫測試 > 踩雷 | rareone0602@gmail.com
| 任瑨洋(羊) | MartianSheep#3857 | 電機三 | 之前幫同學寫他discord bot的後台方便耍油,C/C++/Py/JS(React為主) | b08901132@ntu.edu.tw mkmarsscience@gmail.com
|游孟霖(eric)|lllIIIIllll#8848|電機三|碰過C/C++/python/JS JS部分幾乎忘光了,沒寫過機器人,discord.py最近才剛開始看|b08901186@ntu.edu.tw ericispipi@gmail.com
|魏麒凌 |KilinW#9999|土木五|碰過不少,但都很淺 寫過一點 discord.py 主要會python跟arduino相關| b06501033@ntu.edu.tw jack233924@gmail.com
| 王迺翔 (迺) | came1#9443 | b02校友 | JS 網站開發 (MERN stack) Python 只會用來改寫好Code :P | narada.wang@hotmail.com |
## 小組
* Bot alert API (1) 10/24 完成
* jerry (組長)
* 加入群組審核 (6)
* mail/oauth (2)
* Frank
* eric (組長)
* 人工驗證 (1)
* Ray
* UI(一開始選擇驗證方式 + 信箱驗證) (1)
* CKB
* database API (2)
* 伊布
* VC
* 身份組選擇(訂閱)機制 (2)
* jerry (組長)
* 羊
* 廣播機器人 (2)
* Yvecca (組長)
* Xiayu
* 申請頻道機制 (2)
* 霏崎 (組長)
* KilinWei
## when2meet
* https://www.when2meet.com/?13217150-TQume
* 目前暫定的人週六 (10/16) 下午 2~6 點
* 備案: 週日 (10/17) 下午 2~6 點
## 各 feature 的 language
* discord.py 將停止運作
* 希望能夠以 python 為主
* 能支援 cog, slash command
## 身分組
* None
* 只能看到【社群守則】頻道
* 已驗證
* 可以看到所有公開頻道
* 各頻道身分組
* 可以看到對應的私有頻道
* 各廣播身分組
* 可以接收對應的廣播
* 管理組 - moderator
* 技術組 - developer
* 組長 - admin
## 頻道
* 社群守則
* 身分組選擇區
* 違規處理區
* 分類: 廣播區
* 公告/校內重要或緊急事務廣播區
* 免費報你知
* 遺失物廣播區
* 新聞廣播區
* 各類校內活動廣播區
* 徵才/問卷廣播區
* 綜合留言版
* 分類: 臨時頻道
* 各頻道連署申請後創立
* 分類: 一般閒聊區
* 綜合閒聊區
* 學生事務閒聊區
* 校友閒聊區
* 教職員與其他人員閒聊區
* 敏感議題閒聊區
* 分類: 學院閒聊區
* 文學院
* 理學院
* 社會科學院
* 醫學院
* 工學院
* 生物資源暨農學院
* 管理學院
* 公共衛生學院
* 電機資訊學院
* 法律學院
* 生命科學院
* 國際學院
* 創新設計學院
* 共同教育中心
* 進修推廣學院
* 校內其他單位
* 分類: 子社群閒聊區
* 各頻道連署申請後創立,採訂閱制
* 分類: 語音頻道
* 公共 1~5
* 私人語音頻道
* 分類: 管理員區
* Bot alert channel
* 分類: 私訊頻道區
* 分類: 頻道封存區
## Discord bot feature
* 按照 priority 高至低排列
* 所有 feature 分兩個面向
* User POV (point of view)
* Admin POV
### Bot alert API
* User POV
* 一旦發生 error,告知 user `很抱歉,出現了非預期性的錯誤,請洽管理員`
* Admin POV
* 所有的 feature 都可以使用本 API
* 建立特定的 bot alert channel,由 bot 包裝錯誤訊息與相關資訊並傳送
### 加入 Discord 群組審核機制
* User POV
* 於【社群守則】頻道點擊「我已同意上述條款」
* bot 發出 dm (direct message) 給 user: 請選擇【信箱驗證】或【人工驗證】
* user 選擇其中一種驗證方式
* 信箱驗證
* Implementation 1: NTU mail
* bot: 請輸入 NTU mail
* user 輸入 NTU mail
* bot: 請再次確認 NTU mail 是否正確
* user: 打勾
* bot: 已寄送驗證碼到 NTU mail
* user 至 NTU mail 獲取驗證碼
* bot: 請輸入驗證碼
* user 輸入驗證碼
* Implementation 2: NTU G-suite
* bot: 請到下列網址使用 NTU G-suite 授權
* user 登入 NTU G-suite 帳號,授權給 NTU Discord
* bot: 已驗證成功,您已獲取【已驗證】身分組
* 人工驗證
* bot: 請輸入您的姓名、職位/身分
* user: 輸入資訊
* bot: 請提供身分證明附圖
* user: 上傳圖片
* bot: 請再次確認資訊是否正確
* user: 打勾
* bot: 請稍候管理員審核,您已獲取【審核中】身分組
* (審核完成後)bot: 已驗證成功,您已獲取【已驗證】身分組
* Admin POV
* 觸發驗證流程的條件
* 對有特定 ID 的訊息點擊特定的 emoji
* 可以開發一個功能調整他對應的訊息、emoji
* 不具有【已驗證】、【審核中】身分組
* CD
* 串資料庫
* 資料庫的選擇
* sqlite,容易使用 & migrate
* others?
* mysql 能夠在 non-root 的情況下使用嗎? 還是說要開 docker? 但 jerry 對工作站 docker 不太熟
* 資料內容定義
* (discord ID, identity, image_path)
* identity: mail account / 台大資工系教授
* image_path: 圖片的路徑
* 可能需要圖庫 (local/remote?)
* image_path (為稀疏,是否可以和 identity 合併?)
* 備份問題
* G-Suite oauth
* 初步調查,台科大、台師大也有 G-Suite
* 需要調查三者能夠使用的客群,好比: 校友、教授有沒有權使用 G-Suite 帳號?
* 優點
* 方便,免去輸入驗證碼的流程
* 比較不怕濫用 (比如故意輸入別人的 NTU mail)
* 比自架安全、可靠
* 缺點
* jerry 對這個流程不太熟,可能需要更多調查,包含:
* 如何用 python 實作
* 所謂的【授權】包含了哪些資訊?
* G-Suite 的普及問題
* 人工驗證流程
* 管理員需要建立一個頻道,專門來審核人工驗證訊息
* 審核過後,該頻道訊息會自動移除
* 以 dm 通知 user 審核結果
* 隱私權問題
* 管理員是否要 audit 使用者對機器人的輸入?
* 優點是有人在惡意輸入的時候能及時發現並阻止
### 身份組選擇(訂閱)機制
* User POV
* 瀏覽數個選擇身分組的頻道
* 查看身分組選擇的訊息
* 點選對應的表情符號以獲取身分組
* Admin POV
* 資料庫
* 記錄身分組選擇的頻道,需要可以增刪
* 頻道原本就存在,僅是登記用
* 記錄這些頻道內的身分組選擇訊息,自動增刪
* 記錄這些身分組選擇訊息包含的 entry,需要可以增刪
* entry 的增刪可以寫成 API,使得其他 feature 也能呼叫(如增刪廣播身分組/增刪頻道身分組)
* 因其有結構層次,推薦用 json
* 用資料庫la
* 可選擇身分組列表的資料結構
* 一個訊息最多包含 10 個 entry (nope)
* 一個 entry 包含可供選擇的身分組、其說明文字與表情符號
* 用 discord embed 包起來很好看
* 實作(預設為 moderator 能使用)
* 偵測 emoji
* `on_raw_reaction_add` instead of `on_reaction_add`
* 為了效率,可以在 memory 裡 maintain 身分組選擇頻道的列表,這樣就不須處理在這些頻道外的 emoji 事件。
* 新增身分組選擇頻道
* arg1: #channel
* 不會新增頻道,僅綁定
* 刪除身分組選擇頻道
* arg1: #channel
* 只有 admin 能使用,避免誤刪
* 不會刪除頻道,僅取消綁定
* 不會刪除身分組,僅刪除該頻道先前記錄的 entry,也因此需要警示指令執行者有多少個 entry 會受到影響
* 新增選擇身分組的 entry
* arg1: \@身份組, arg2: #channel, arg3: 身分組說明, arg4: emoji
* 確認參數是否合法
* 不可以為管理員身分組
* 刪除選擇身分組的 entry
* arg1: \@身分組
* 同樣只有 admin 能使用,避免誤刪
* call Entry Manage API
* Entry Manage API
* 內建 `dict` 資料結構與相關的查找/修改 functions
* `RoleSelection: dict`
* `'metadata': dict`
* `'maxEntryPerMessage': int` (default 10)
* `'channels': list of dict`
* `'channel_id': int`
* `'messages': list of dict`
* `'message_id': int`
* `'entries': list of dict`
* `'role_id': int`
* `'description': str`
* `'emoji': int`
* 一個身分組僅允許一個 entry 存在
* 保證 I/O atomicity
* 用 json 來儲存資料(因為理論上不會存太多資料)
* API
* `getRole(channl_id: int, emoji: str) -> Optional[discord.Role]`
* `channel_id`: discord channel ID
* `emoji`: a default unicode emoji of discord
* return value
* `discord.Role`: the corresponding role
* `None`: channel_id doesn't exist or no corresponding role
* `modifyRoleSelectionChannel(mount: bool, channel_id: int) -> bool`
* `mount`:
* `True`: mount
* `False`: unmount
* `channel_id`: discord channel ID
* return value
* `True`: success
* `False`: channel_id doesn't exist or has already/never been mounted
* `modifyRoleSelectionEntry(add: bool, role_id: int, channel_id: int, description: str, emoji: str) -> bool`
* `add`:
* `True`: add
* `False`: remove
* `role_id`: discord role ID
* `channel_id`: discord channel ID (required when `add == True`)
* `description`: description to this role (required when `add == True`)
* `emoji`: a default unicode emoji of discord (required when `add == True`)
* return value
* `True`: success
* `False`: either `role_id`, `channel_id`, `description`, `emoji` is invalid
* Extension and Discuss results / 修憲
* 原則:少少的頻道裡面有一些訊息,這些訊息下面會有emoji可以點
* 巢狀結構
* 訊息必須專注在同一件事情上,同一件事情的emoji都放在同一個訊息
* 情況:今天有人新增一個頻道,導致多出了一個新的身分組
* 新增頻道的時候要指定大類別
* 類別應該是管理員指定,可以由管理員新增
* 類別可刪iff下面沒有身分組
* 同一類別的新身分歸類在同一個訊息裡面
* 遊戲類別 etc.
* 爆20個再開新訊息
* 許多相似類別的訊息歸類在一個很高階級的頻道下面
* 學術身分組選擇
* 休閒身分組選擇 etc.
* 情況:刪除身分組
* 更改選擇身分組的訊息
* 下次新增的時候記得要從這邊開始加(有點像memory arrangement)
* 訊息裡的emoji刪光光的時候要刪掉訊息
* 由於沒辦法移植emoji,不考慮合併
* "刪除"是把這個身分組從db裡面移除,然後把emoji撤下而已,不要真的去刪掉那個身分組(比較像身分組被archieve)
* 用資料庫la
* 記得把讀寫資料庫的操作全部wrap在一起
* 可是json有巢狀
* 直接存很多筆資料在db裡面
* 一筆資料包括哪個類別、哪個頻道、哪個訊息、哪個emoji對應到哪個身分組
* 問題:要怎麼知道從哪個訊息開始加身分組
* 暴力:每次新增的時候直接count
* 暴力2:直接新增一個新的table紀錄每個訊息有幾個身分組
* 進度報告
* git開個branch
* dc那邊進度報告
### 廣播機器人
* User POV
* 廣播接收者
* 使用訂閱機制獲取身分組
* 廣播發送者
* 私訊機器人送出指令
* 選擇廣播種類
* 主旨與內文
* 待定
* Admin POV
* 使用指令增刪廣播身分組
* 預設要有哪些?
* 使用訂閱機制的 function,為其在特定頻道增刪可選擇的身分組
* 對每種廣播要定義其冷卻時間和發送頻道
* 同樣可以用 json 存
### 申請頻道機制
* User POV
* 連署機制尚待管理組討論
* Admin POV
* 申請通過後
* bot 新增頻道與對應身分組
* 挑戰: 如何在特定位置新增頻道?
* bot 設定僅有該身分組能檢視頻道
* 使用訂閱機制的 function,為其在特定頻道新增可選擇的身分組
* 頻道消滅
* 刪除對應身分組
* 使用訂閱機制的 function,為其在特定頻道刪除可選擇的身分組
* 方案1: archive
* 唯獨
* 公開可見,移動分類至【頻道封存區】
* 一旦頻道過多,封存頻道的淘汰機制是?
* 方案2: delete
* 需要備份資料嗎? 要存在哪裡?