首先到Discord 開發網站點下右上角的New Application
輸入你想要的機器人名稱(名稱不要包含Discord),記得勾選同意條款後再按下創建
點選左邊的bot,到底下將Privileged Gateway Intents 的三個選項打開
然後按下紫色的Reset Token按鈕並複製Token(Token很重要不能告訴別人,也不行上傳到GitHub,會被官方掃描到並重置Token,可以找個自己的地方記錄下來)
接著找到OAuth2的URL Generator
上下兩區選項分別勾選bot和Administrator,最後複製底下的網址到瀏覽器貼上
進到貼上的網址,選好想要的伺服器後點選繼續並授權將機器人加入伺服器
接著進入伺服器檢查機器人是否成功進入
下一步就是要讓機器人上線了!
1.到Replit註冊並登入帳號
2.點下左上角的Create Repl,選擇Python並在Title輸入自訂名稱,最後按下藍色的Create Repl按鈕
在main.py輸入以下程式碼
import discord #導入discord
import os
bot = discord.Bot(intents = discord.Intents.all())
#定義物件 intents是前面勾選的三個勾勾
@bot.event
async def on_ready():
print(f"「{bot.user}」已登入")
bot.run(os.environ['bot_token']) #運行機器人
然後按下第一次執行
因為擁有token的人就可以操控機器人
而Repl.it的程式碼是網路上所有人都能查看的
來到左下角點選Secrets
按下New Secret
創建一個名為bot_token的Key
Value為前面複製的token
接下來到左下角點選Packages
在右邊的搜尋欄打入py-cord並找到下面圖片紅框的選項按下Install
在右邊的搜尋欄打入discord2並找到下面圖片紅框的選項按下Install(discord2一定要最後安裝)
按下第二次執行後你就可以看到機器人已經上線了
如果產生錯誤只需將discord2刪除後再重新安裝即可
主要的機器人狀態有線上、請勿打擾、閒置、遊戲、聆聽、觀看、直播
@bot.event #定義事件
async def on_ready(): #定義為on_ready
await bot.change_presence(status=discord.Status.dnd)
print(f"{bot.user} 啟動!!!!") # 輸出提示 bot.user為機器人名稱
@bot.event #定義事件
async def on_ready(): #定義為on_ready
await bot.change_presence(status=discord.Status.idle)
print(f"{bot.user} 啟動!!!!") # 輸出提示 bot.user為機器人名稱
@bot.event
async def on_ready():
activity = discord.Activity(
type=discord.ActivityType.playing, # 設定狀態
name="Discord bot" # 這定自訂義狀態
)
await bot.change_presence(activity=activity)
print(f"「{bot.user}」已登入")
@bot.event
async def on_ready():
activity = discord.Activity(
type=discord.ActivityType.listening, # 設定狀態
name="Podcast" # 這定自訂義狀態
)
await bot.change_presence(activity=activity)
print(f"「{bot.user}」已登入")
@bot.event
async def on_ready():
activity = discord.Activity(
ttype=discord.ActivityType.watching, # 設定狀態
name="News" # 這定自訂義狀態
)
await bot.change_presence(activity=activity)
print(f"「{bot.user}」已登入")
@bot.event
async def on_ready():
activity = discord.Streaming(
name="yee",
url="https://www.youtube.com/watch?v=pLtscOCyfPU"
)
await bot.change_presence(activity=activity)
print(f"「{bot.user}」已登入")
輸入 | 輸出 | |
---|---|---|
Python | input | print() |
Discord Bot | message | await.XXX.send("XXX") |
@bot.event
async def on_message(message):
if message.author == bot.user:
return
if message.content == "hi": #如果有訊息為"hi"
await message.channel.send("hello!") #在此頻道發送"hello!"
@bot.event
async def on_message(message):
if message.author == bot.user:
return
if message.content.startswith("你好"): #當開頭為"你好"
await message.channel.send("你好啊!") #在此頻道發送"你好啊!"
@bot.event
async def on_member_join(member): #定義為使用者加入 調用member
wel_channel_id = 1234567891234567890 #發送頻道ID
wel_channel = bot.get_channel(wel_channel_id) #取得頻道
await wel_channel.send(f"歡迎 {member.mention} 加入!") #在該頻道發送訊息 mention能@到該使用者
點擊左下角的設定
在左邊找到進階,把開發者模式打開
對頻道右鍵,點擊複製頻道ID
@bot.slash_command(description="回復world") #定義為slash_command,description為備註(也可不放)
async def hello(ctx): #指令名稱為"hello" 並調用ctx
await ctx.respond("world") #回復"world"
@bot.slash_command(description="回答時間") #定義為slash_command description為備註(也可不放)
async def time(ctx): #指令名稱為"time" 並調用ctx
now = datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=8)))
await ctx.respond(f'現在是 {now.strftime("%m 月 %d 日 %H點%M分%S秒")}') #回答時間
如果要適用上方回答時間的斜線指令,要記得在開頭要加入import datetime
import discord
import os
import datetime #記得加入這行
bot = discord.Bot(intents = discord.Intents.all())
這次的教學就到這邊
非常感謝OsGa提供教學,以上部份程式由OsGa提供
有問題也可以直接留言訊問
喜歡話可以幫忙按個Like幫我加個油喔!!!