---
# System prepended metadata

title: '**Discord Bot 筆記**'

---

# **Discord Bot 筆記**
這些是我自己蒐集資料以及查相關的影片加上一些自己的想法寫出來的筆記。
主要都是在學校自主學習時去學的，之後也會增加一些後來所學的。
(PS:語言為python,discord.py版本為1.5.1)
詳見心路過程以及其他資訊相關東西可以點[這裡](https://icerain0930.blogspot.com/)
## 前置

### 環境
我主要是用repl.it這個網站在寫bot，一開始先創建一個New repl(選擇python語言)，就能創一個新的檔案，之後在旁邊的packages搜尋discord.py並安裝，基本上就完成了!
### 程式碼
基本程式架構
```python=
import discord
from discord.ext import commands
bot=commands.Bot(command_prefix='!') 
@bot.event
async def on_ready():
    print(">>bot is online<<")
@bot.command()
async def hi(ctx):
    await ctx.send('HI')
bot.run('TOKEN')
```
來一一解釋程式碼的意思吧!
```python=
bot=commands.Bot(command_prefix='!')
```
這行代表每次打指令時的前綴。
ex: !help的!


```python=
@bot.command()
async def hi(ctx):
    await ctx.send('HI')
```
為指令執行的部分，此為輸入hi，機器人會輸出HI。


```python=
bot.run('TOKEN')
```
這代表這些程式要在哪個機器人執行。

### TOKEN
在上面的程式碼可以看到有一個叫TOKEN的東西，什麼是TOKEN?

TOKEN就像是每個機器人的身分證，每台機器人都不一樣。

## 程式
主要是在自主學習時寫出來的程式。

### 覆誦訊息
```python=
@bot.command()
async def repeat(ctx,msg):
  await ctx.message.delete() #刪除所傳的訊息 
  await ctx.send(msg)        #機器人覆誦
```
### 刪除訊息(多個)
```python=
@bot.command()
async def delete(ctx,num:int):            #delete 數字，決定刪除多少條訊息 
  await ctx.channel.purge(limit=num+1)    #刪除訊息(因為指令也算一條訊息 所以num+1)
```
### 隨機亂數
```python=
@bot.command()
async def roll(ctx, num1:int, num2:int):
    num = random.randint(num1, num2)
    await ctx.send(num)
```
主程式(main)要記得import random(亂數)
### 隨機傳訊息
```python=
@bot.command()
async def owo(ctx):
  random_owo=random.choice(jdata['owo'])
  await ctx.send(content=random_owo)
```
注意:需多創一個名為setting.json的檔案
主程式(main)開頭加上
```python=
import json
with open('setting.json',mode='r',encoding='utf8')as jfile:
  jdata=json.load(jfile)
import random   #取亂數用
```
setting.json內容:
```json=
{
  "owo":["owo1","owo2"]
}
```


## 參考資料
有在教discord bot的youtuber(中文):[Proladon](https://www.youtube.com/channel/UCczXI0u-LKlX-oBwrkKtOdg)
程式討論網站(英文)[Stck Overflow](https://stackoverflow.com/)