iT邦幫忙

0

使用 Replit(Python) 製作 Discord bot -Cog

  • 分享至 

  • xImage
  •  

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

這篇教學和另一篇教學有點不同,上次的程式碼是普通架構,而這次的程式碼是使用Cog架構

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

自行建檔

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
import os
from pathlib import Path

bot = discord.Bot(intents=discord.Intents.all())

for cog in [p.stem for p in Path("cog").glob("*.py")]:
    bot.load_extension(f'cog.{cog}')
    print(f'Loaded {cog}.')
print('Done.')

@bot.event
async def on_ready():
    print(f"「{bot.user}」已登入")

@bot.command()#重新載入Cog
async def reload(ctx, cog):
    bot.reload_extension(f'cog.{cog}')
    print(f'Loaded {cog}.')
    await ctx.respond(f'{cog} reloaded successfully.')

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

Cog程式碼編寫

Cog架構和普通架構不太一樣,要依底下表格的變化編寫

指令(command) 事件(event)
main.py @bot.command() @bot.event
Cog @bot.slash_command @commands.Cog.listener()
import discord
from discord.ext import tasks, commands

bot = discord.Bot(intents=discord.Intents.all())

class 檔名(commands.Cog): #需替換檔名為自己的名稱
    def __init__(self, bot):
        self.bot = bot

    @commands.Cog.listener()
    
    
    @bot.slash_command


def setup(bot):
    bot.add_cog(檔名(bot)) #需替換檔名為自己的名稱 

建立一個名為cog的資料夾
在裡面創建一個Python(.py)檔
https://ithelp.ithome.com.tw/upload/images/20240322/20161576U7n9KWVXRl.png

訊息偵測

import discord
from discord.ext import tasks, commands

bot = discord.Bot(intents=discord.Intents.all())

class hi(commands.Cog):

  def __init__(self, bot):
    self.bot = bot

  @commands.Cog.listener()
  async def on_message(self, message):
    if message.author == bot.user:
      return
    if message.content == "hi":  #如果有訊息為"hi"
      await message.channel.send("hello!")  #在此頻道發送"hello!"

def setup(bot):
  bot.add_cog(hi(bot))

    bot.add_cog(hi(bot))

斜線指令

簡單回覆訊息練習

import discord
from discord.ext import commands

bot = discord.Bot(intents=discord.Intents.all())

class hello(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @bot.command(description="回復world") #定義為slash_command,description為備註(也可不放)
    async def hello(self,ctx): #指令名稱為"hello" 並調用ctx
      await ctx.respond("world") #回復"world"
      
def setup(bot):
    bot.add_cog(hello(bot))

這裡有很多設定是和上一篇一模一樣,很多教學都省略了,所以可以過去看一下→傳送門

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


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

尚未有邦友留言

立即登入留言