iT邦幫忙

0

使用 Replit(Python) 製作 Discord bot

  • 分享至 

  • xImage
  •  

今天我要教大家使用 Replit(Python) 製作 Discord bot

這篇教學的程式碼是普通架構,如果想使用Cog架構可以到這裡學習→傳送門

機器人設置

首先到Discord 開發網站點下右上角的New Application
https://ithelp.ithome.com.tw/upload/images/20230927/20161576ODdmvASILS.jpg
輸入你想要的機器人名稱(名稱不要包含Discord),記得勾選同意條款後再按下創建
https://ithelp.ithome.com.tw/upload/images/20230929/20161576GK4Mjc5onK.jpg
點選左邊的bot,到底下將Privileged Gateway Intents 的三個選項打開
然後按下紫色的Reset Token按鈕並複製Token(Token很重要不能告訴別人,也不行上傳到GitHub,會被官方掃描到並重置Token,可以找個自己的地方記錄下來)
https://ithelp.ithome.com.tw/upload/images/20230927/20161576e1q1IKTJkl.jpg
接著找到OAuth2的URL Generator
上下兩區選項分別勾選bot和Administrator,最後複製底下的網址到瀏覽器貼上
https://ithelp.ithome.com.tw/upload/images/20230927/20161576Y9dyXrgLLf.jpg
進到貼上的網址,選好想要的伺服器後點選繼續並授權將機器人加入伺服器
https://ithelp.ithome.com.tw/upload/images/20230927/20161576ECHSOPqdhF.png
接著進入伺服器檢查機器人是否成功進入
https://ithelp.ithome.com.tw/upload/images/20230927/20161576Sgsvi4whlk.png
下一步就是要讓機器人上線了!

前置作業

如果不想後面麻含的設定可以按下右邊綠色的按鈕直接用我的模板製作

※如果使用我的模板,基本程式碼編寫和環境安裝可以跳過,但還是要設定Secrets儲存token

https://ithelp.ithome.com.tw/upload/images/20240328/20161576XOHfdUmkrr.png

自行建檔

1.到Replit註冊並登入帳號
2.點下左上角的Create Repl,選擇Python並在Title輸入自訂名稱,最後按下藍色的Create Repl按鈕
https://ithelp.ithome.com.tw/upload/images/20230926/201615762r1flF7AwB.jpg
https://ithelp.ithome.com.tw/upload/images/20230926/20161576AXvE7pvBEI.jpg

基本程式碼編寫

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']) #運行機器人

然後按下第一次執行

使用Secrets儲存token

因為擁有token的人就可以操控機器人
而Repl.it的程式碼是網路上所有人都能查看的
來到左下角點選Secrets
按下New Secret
創建一個名為bot_tokenKey
Value為前面複製的token
https://ithelp.ithome.com.tw/upload/images/20231109/20161576HLbw7W4VY0.png

環境安裝(此部分順序很重要)

接下來到左下角點選Packages
https://ithelp.ithome.com.tw/upload/images/20230926/20161576DFqDNRdUe8.jpg
在右邊的搜尋欄打入py-cord並找到下面圖片紅框的選項按下Install
https://ithelp.ithome.com.tw/upload/images/20230926/20161576zrMZF45kYg.jpg
在右邊的搜尋欄打入discord2並找到下面圖片紅框的選項按下Install(discord2一定要最後安裝)
https://ithelp.ithome.com.tw/upload/images/20230926/20161576UNzfkxiPy5.jpg
按下第二次執行後你就可以看到機器人已經上線了
如果產生錯誤只需將discord2刪除後再重新安裝即可
https://ithelp.ithome.com.tw/upload/images/20230928/2016157657vkhpLsfr.png

進階程式碼編寫

機器人狀態

主要的機器人狀態有線上、請勿打擾、閒置、遊戲、聆聽、觀看、直播

請勿打擾

@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

點擊左下角的設定
https://ithelp.ithome.com.tw/upload/images/20230929/20161576kHRKgUTRNm.jpg
在左邊找到進階,把開發者模式打開
https://ithelp.ithome.com.tw/upload/images/20230929/20161576GTktg3Kwk4.jpg
對頻道右鍵,點擊複製頻道ID
https://ithelp.ithome.com.tw/upload/images/20230929/201615767U4Jq4Yikl.jpg

斜線指令

簡單回覆訊息練習

@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()) 

https://ithelp.ithome.com.tw/upload/images/20231109/20161576DPWxdlxAm3.png

這次的教學就到這邊
非常感謝OsGa提供教學,以上部份程式由OsGa提供
有問題也可以直接留言訊問
喜歡話可以幫忙按個Like幫我加個油喔!!!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言