---
tags: dc-bot-dev
---
# DC Bot Dev
## 定位
- 掌管伺服器中的所有Bot,包括外來種以及原生種。
- 針對成員需求或是其他可帶動伺服器氛圍的功能進行開發。
## 現在狀況
- 沒人開發(我只是過年回來弄些基本的東西)
- 沒團隊(你們可以組一個)
## 團隊分工
可照專長或是經驗分組
- 程式組/測試組
- 維護環境(VPS/...)
- 寫code
- 數據處理
-
- ...
- 測試code/指令
- **傾聽成員需求/反饋**
- 其他
- 想點子
- 人性化文本/對話/反應/互動
- 美術設計
## 可能要完成/間接完成的事
- 活絡伺服器氛圍/提高活躍度
- 繼續寫懸賞題(ver.2)的功能
- 工作區的SQCS_Bot板板裡面有一些我之前寫的東西,一些重要的資訊可能都在裡面。
> [工作區邀請連結](https://trello.com/invite/sqcsbotsdevteam/f462b45e35e5e105bcc2889e4f38ff3d)
## 特別要注意的事
又稱為弄了差不多222小時的bot相關作業後的一些心得(想到甚麼就寫啥,所以會有點亂)
- TOKEN和其他在.env中的東西 ***絕對不要洩漏***
> 作為掌管伺服器中各種大小事的機器人,基本上權限是全給。測試指令請在測試群中或是封閉環境中測試,確保好之後再拿到群裡開始用。發生甚麼外洩被盜bot然後被轟炸的話伺服器就掰掰。(我自己也有盜過其他人的bot並限度內刷屏作為善意的token外洩警告,所以很清楚盜token者有惡意的話可以做啥)(或是之後要對「權限全給」這件事進行修正也可以)
- 弄bot請保持愉快的心情,不要只是為了弄而弄,累了就休息
- 團隊中不分階級高低,大家同等
- 有事討論,不要潛水;平常沒事也可以聊
- **要分工**,1人弄絕對會弄到死
- 學會看官方的document,或是至少對package的運作原理有點了解
- 遇到問題時,在問他人前請先上網google一下,或是去看些youtube相關影片,真的不太行就拿去問別人沒關係,不用太計較這個點
- 在此推薦「Shelter-Zone」的Discord群,可以去裡面問bot相關的問題
- 花自己可以承擔的時間成本在上面,不要荒廢其他東西
- 開發需要的權限之後有問題可以用我的gmail(darrenhsiou@gmail.com)聯絡我,開學後應該不會太碰discord
- 寫些文件留給後人看 (我都沒寫)
- 題外話:現在這隻機器人(Etapocsm)的命名由來
- Extendable Administrative Program of Comprehensive Server Management
- Etapocsm <eta-'pok-sm> ('是重音, pok發pot把t換成k的音)
- 它有新的綽號了:**聖劍**
- 可能可以用個保護伺服器的專案,Discord最近有點多安全風波。(我已經有用其他人寫的SafetyAtLast™#5865來做為第一道防線了,但從今天的狀況看來他有時好像會出錯)
- 如果不太清楚要弄啥的話可以去看之前的舊專案(SQCS_Bot)還有開發環境內(bot-dev)的東西。
## 從何開始
1. 想寫Code者先學下基本的JS
2. 大家可以自行討論要各自要做甚麼
3. 由有經驗者帶領
## Coding style (JS)
* 左 `{ / [ / (` 括號不換行!
* 變數:snake_case
* class/type/interface:CamelCase
* 其他:lowerCamelCase
* 多參數或是具有optional參數的func在調用時要用dict作為輸入, ex:
bad:
```javascript=
function haha(a, b, c, d) {
console.log(a, b, c, d);
};
haha('aa', 'bb', 'cc', 'dd');
```
good:
```javascript=
function haha(obj) {
console.log(obj.a, obj.b, obj.c, obj.d);
};
haha({
a: 'aa',
b: 'bb',
c: 'cc',
d: 'dd'
});
```
* 盡量使用 early return ex:
```javascript=
function func(){
if (condition1) return;
if (condition2) return;
// some code
}
```
## Coding style (PY)
* 左 `{ / [ / (` 括號不換行!
### PEP 8
### Pycharm
* 改到 `Problems` 區塊不出現錯誤提醒或警告
* 但由 `只有單個 except` 引起的錯誤如果不重要,可以忽略。
### 命名
* [參考文章](https://medium.com/%E7%A8%8B%E5%BC%8F%E6%84%9B%E5%A5%BD%E8%80%85/%E8%AE%8A%E6%95%B8%E5%91%BD%E5%90%8D-f53cd1115076)
變數:`snake_case`
類別:`CamelCase`
### dict/json
* 當作為函式的參數,且結構多於一層時,請獨立出來新定義變數,再以變數作為傳入值。
```python
# example
dict_obj = {
"<dict>": {
"ob1",
"ob2"
},
"<list>": [
"ob1",
"ob2"
]
}
JsonApi().put_json('haha', dict_obj)
```
### 函式
如果參數量太多,請改為 `Class` 或使用`asterisk operator (*)`做參數unpacking。
```python
# example
arguments = [
arg1,
arg2,
arg3,
71836,
189183,
'owo',
'??'
]
my_function(*arguments)
```
有時候使用 `kwargs` 更佳