---
# System prepended metadata

title: DC Bot Dev
tags: [dc-bot-dev]

---

---
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` 更佳
